> ## Documentation Index
> Fetch the complete documentation index at: https://notes.enesbaspinar.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Summary

> CI/CD hakkında özet bilgi.

<img className="block mx-auto w-12" src="https://mintcdn.com/enesbaspinar/3D63_eGU3Fk85EO3/images/hero/ci-cd.png?fit=max&auto=format&n=3D63_eGU3Fk85EO3&q=85&s=4668afa4c885afcb4449ccaad1fad37d" alt="CI/CD" width="413" height="217" data-path="images/hero/ci-cd.png" />

## What CI/CD?

Uzuncası "continuous integration and continuous delivery/deployment" olan bu kavram,
DevOps'un mihenk taşı ve yazılım geliştirme sürecinin yaşam döngüsüdür. Basitçe ifade
etmek gerekirse, yazdığınız kodun canlıya alınması için 3 aşama gerekir:

<div>
  {[{ title: "Build" }, { title: "Test" }, { title: "Deploy" }].map(
      ({ title, description }, i, list) => (
        <div class={`relative flex items-start ${i !== 6 ? "pb-2" : ""} ml-4`}>
          {i < list.length - 1 && (
            <div class="absolute w-px h-[calc(100%-2.75rem)] top-[2.75rem] bg-gray-200/70 dark:bg-white/10" />
          )}
          <div class="absolute ml-[-14px] py-2">
            <div class="w-7 h-7 shrink-0 rounded-lg bg-gray-100 dark:text-white dark:bg-[#26292E] text-sm text-gray-800 font-semibold flex items-center justify-center">
              {i + 1}
            </div>
          </div>
          <div class="w-full overflow-hidden pl-12 pr-px">
            <span class="block mt-2 -ml-4 font-bold">{title}</span>
            <span
              class={`block mt-2 -ml-4 ${i !== 6 ? "pb-2" : ""}`}
              dangerouslySetInnerHTML={{ __html: description }}
            ></span>
          </div>
        </div>
      )
    )}
</div>

İşte tüm bu adımların otomatize edilme işlemidir.

## Why CI/CD?

Tüm bu süreçlerin otomatize edilmesinin birkaç avantajı vardır:

<div>
  {[
      {
        description:
          "Otomatik yapılan işleme insan gücü harcanmamış olur ve efor önemli işlere ayrılabilir.",
      },
      {
        description:
          "Hatalar canlıya çıkmadan önce tespit edilir ve uygulamanın down olma süresi azalır. Yazılımda da itibardan tasarruf olmamalıdır.",
      },
      {
        description:
          "Deployment sırası beklemeniz gerekmez. Kullanıcılar daha sık ve kararlı güncellemeler alır.",
      },
      {
        description:
          "Yazılımcılar deployment stresinden kurtulduğu için burnout azalır.",
      },
      {
        description:
          "Olası bir incident anında siteyi önceki haline almak daha kolaydır.",
      },
    ].map(({ title, description }, i, list) => (
      <div class={`relative flex items-start ${i !== 6 ? "pb-2" : ""} ml-4`}>
        {i < list.length - 1 && (
          <div class="absolute w-px h-[calc(100%-2.75rem)] top-[2.75rem] bg-gray-200/70 dark:bg-white/10" />
        )}
        <div class="absolute ml-[-14px] py-2">
          <div class="w-7 h-7 shrink-0 rounded-lg bg-gray-100 dark:text-white dark:bg-[#26292E] text-sm text-gray-800 font-semibold flex items-center justify-center"></div>
        </div>
        <div class="w-full overflow-hidden pl-12 pr-px">
          <span class="block mt-2 -ml-4 font-bold">{title}</span>
          <span
            class={`block mt-2 -ml-4 ${i !== 6 ? "pb-2" : ""}`}
            dangerouslySetInnerHTML={{ __html: description }}
          ></span>
        </div>
      </div>
    ))}
</div>

## Concepts

<Frame caption="Source: gitlab.com">
  <img className="block mx-auto w-12 rounded-lg" src="https://d36ai2hkxl16us.cloudfront.net/course-uploads/bf663a54-0bb6-4726-bd83-1e76668129cf/8u7utgpy3iuj-GitLabWorkflow.png" alt="CI/CD" />
</Frame>

### Continuous Integration (CI)

Birden fazla yazılımcının aynı projede çalıştığı durumlarda, kodların sık sık
repoya entegre edilmesidir. Daha sonra değişiklikleri doğrulamak için otomatik
build ve testler çalıştırılarak kod kalitesi sağlanır. Sorunlar erken tespit
edilir ve merge request'ler birikmez.

### Continuous Delivery (CD)

Continuous Integration'ın bir adım ötesidir. Kod paketlenip otomatik olarak
test ortamına deploy edilir ve production için hazırlanır. Production'a deploy
etme kararı manueldir.

### Continuous Deployment (CD)

Continuous Delivery'ın bir adım ötesidir. Production'a otomatik deploy eder.

## How to measure the effect?

CI/CD workflow'unuzun başarısını ölçmek için birkaç metrikten faydalanabiliriz:

### Lead time

Bir özelliğin fikir olarak ortaya çıkışından itibaren kullanıcılara sunulduğu ana kadar geçen süredir. Ancak yazılımda işin board'a açıldıktan sonrası dikkate alınır. Süre ne kadar uzunsa, iş yapıldıktan sonra geribildirim alınması da o kadar uzun olur.

### Cycle time

İşin yapılmaya başlandığı andan itibaren kullanıcıya sunulduğu ana kadar geçen süredir.

### Time to value (TTV)

Kodun geliştirmesi bittikten sonra kullanıcıya sunulana kadar geçen süredir.

### Deployment frequency

Deployment yapmak için CI/CD workflow'unun çalıştırılma sayısıdır. Bu sayı ne kadar yüksekse, çıkan kod o kadar az sayıda değişklik içerir ve incident ihtimali azalır.

### Mean time to detect (MTTD)

Deployment yapıldığı andan itibaren değişikliklerden kaynaklanan sorunu tespit etmek için geçen ortalama süredir. Bu süre ne kadar kısa olursa, kullanıcılar o kadar az etkilenir.

### Mean time to recovery (MTTR)

Deployment yapıldığı andan itibaren production'daki problemin giderilmesi için geçen ortalama süredir. Otomatik sistem de olsa hatalar kaçınılmaz olabilir. Bu noktada amaç hatalara müdahale süresini en aza indirmektir.

### Rollback rate

Rollback yapılan deployment yüzdesidir. Deployment'ın uygulamada problemlere sebep olmasindan dolayi geri alınma işlemine **rollback** denir.

***

Artık CI/CD sürecinin ne olduğunu, neden önemli olduğunu ve nasıl ölçüleceğini biliyorsunuz.
