CI/CD Nedir? Otomatik Test ve Yayın Süreci

CI/CD, yazılımdaki her değişikliğin otomatik olarak test edilip güvenle yayına alınmasını sağlayan süreçtir. Ne işe yaradığını ve nasıl kurulduğunu anlatıyoruz.

İçindekiler
  1. CI/CD nedir? İki kavramın kısa tanımı
  2. Bir CI/CD hattı adım adım nasıl çalışır?
  3. İşletmeniz için somut faydaları
  4. Hangi araçlar kullanılır?
  5. CI/CD kurarken dikkat edilmesi gerekenler
  6. Bu işi nasıl birlikte yaparız?
  7. Sık sorulan sorular
  8. Sonuç

Yazılımcınız “küçük bir düzeltme yaptım, yayına aldım” dedikten bir saat sonra sipariş formunun çalışmadığını fark ettiniz mi? Bu tür sürprizlerin önüne geçmenin en sağlam yolu, değişikliklerin elle değil otomatik bir hat üzerinden kontrol edilip yayına alınmasıdır. CI/CD nedir sorusunun kısa cevabı tam olarak budur: kodda yapılan her değişikliği otomatik olarak derleyen, test eden ve onay alındığında canlı ortama taşıyan bir çalışma düzeni. Bu yazıda kavramı teknik olmayan bir dille açıyor, işletmeniz için ne anlama geldiğini somut örneklerle anlatıyorum.

CI/CD nedir? İki kavramın kısa tanımı

CI, İngilizce Continuous Integration yani sürekli entegrasyon demektir. Geliştiriciler kodu sık aralıklarla ortak depoya gönderir; her gönderimde sistem kodu otomatik olarak derler ve testleri çalıştırır. Hata varsa birkaç dakika içinde haber verir, hatalı kod ana dala karışmaz.

CD ise iki anlamda kullanılır: Continuous Delivery (sürekli teslimat) ve Continuous Deployment (sürekli dağıtım). Sürekli teslimatta testlerden geçen kod her an yayına hazır bekler ve bir kişi “yayınla” düğmesine basar. Sürekli dağıtımda ise insan onayı da kaldırılır; testleri geçen her değişiklik doğrudan canlıya çıkar. Çoğu kurumsal projede ilki daha uygundur, çünkü yayın zamanını işletme belirlemek ister.

Bir CI/CD hattı adım adım nasıl çalışır?

Bu otomatik süreç genellikle “pipeline” yani hat olarak adlandırılır. Tipik bir hat şu adımlardan oluşur:

  1. Kod gönderimi: Geliştirici değişikliği Git deposuna gönderir. Sürüm kontrolünün temellerini Git ile sürüm kontrolü yazısında ayrıntılı anlattım; CI/CD bu temelin üzerine kurulur.
  2. Derleme: Bağımlılıklar yüklenir, gerekiyorsa uygulama derlenir veya bir Docker imajı oluşturulur.
  3. Otomatik testler: Birim testleri, entegrasyon testleri ve kod kalite kontrolleri çalışır.
  4. Test ortamına dağıtım: Kod önce canlıya benzeyen bir ortama kurulur, burada gerçekçi verilerle denenir.
  5. Onay ve yayın: Her şey yolundaysa canlı ortama aktarılır; sorun çıkarsa önceki sürüme hızlıca dönülür.

Örnek bir senaryo düşünelim: Bir e-ticaret sitesinde kargo ücreti hesaplama kuralını değiştirdiniz. CI hattı, “500 TL üstü siparişte kargo ücretsiz” gibi önceden yazılmış testleri çalıştırır. Yeni kod bu kuralı yanlışlıkla bozduysa test kırmızıya döner ve değişiklik müşteriye hiç ulaşmaz.

İşletmeniz için somut faydaları

İşletme sahipleri “CI/CD nedir ve bana ne kazandırır?” diye sorduğunda cevabı teknik ayrıntıda değil, sonuçlarda aramak gerekir. Konu çoğu zaman yalnızca yazılımcıların ilgilendiği bir iş gibi görülür, ama etkisi doğrudan işletmeye yansır:

  • Daha az canlı ortam hatası: Hatalar müşteriden önce otomatik testlerde yakalanır.
  • Daha hızlı geliştirme: Küçük değişiklikler sık ve güvenle yayına alınabildiği için yeni özellikler haftalarca beklemez.
  • Kişiye bağımlılığın azalması: Yayın adımları bir betikte yazılıdır; “bunu sadece eski yazılımcı biliyordu” durumu ortadan kalkar.
  • Kolay geri dönüş: Her sürüm kayıtlı olduğundan, sorunlu bir yayından önceki sürüme dakikalar içinde dönülebilir.
  • Şeffaflık: Hangi değişikliğin ne zaman, kim tarafından yayına alındığı kayıt altındadır.

Hangi araçlar kullanılır?

CI/CD nedir sorusunu araçlar üzerinden düşünmek de işi kolaylaştırır. Piyasada çok sayıda CI/CD aracı var ve seçim, kodun nerede tutulduğuna ve sunucu yapısına göre değişir. Yaygın seçenekleri karşılaştırmalı olarak şöyle özetleyebilirim:

Araç Öne çıkan özelliği Uygun olduğu durum
GitHub Actions GitHub deposuyla doğrudan bütünleşik Kodu GitHub’da tutan küçük ve orta projeler
GitLab CI/CD Depo, hat ve kayıt defteri tek çatıda Kendi sunucusunda GitLab çalıştıran ekipler
Jenkins Esnek, eklentilerle genişler Karmaşık, şirket içi altyapılar
Bitbucket Pipelines Atlassian araçlarıyla uyumlu Jira kullanan ekipler

Ücretlendirme ve kullanım kotaları zaman zaman değiştiği için bu bilgileri her zaman sağlayıcının güncel sayfasından kontrol etmenizi öneririm.

Basit bir hat tanımı örneği

Aşağıda GitHub Actions ile her gönderimde testleri çalıştıran sade bir yapılandırma görüyorsunuz. Gerçek projelerde buna dağıtım adımları da eklenir:

name: testler
on: [push]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci
      - run: npm test

CI/CD kurarken dikkat edilmesi gerekenler

Otomasyon, ancak doğru kurulduğunda işe yarar. Kötü yapılandırılmış bir hat, hatalı kodu da aynı hızla yayına taşır. Dikkat edilmesi gereken başlıca noktalar şunlardır:

  • Testsiz otomasyon yanıltıcıdır: Hat yeşil yanıyor diye kod doğru değildir; anlamlı testler yazılmalıdır. Test türlerini yazılım testi yazısında ele aldım.
  • Gizli bilgiler koda yazılmamalı: Veritabanı şifreleri ve API anahtarları aracın “secrets” bölümünde şifreli tutulmalıdır.
  • Canlıdan önce ara ortam: Değişiklikleri önce bir staging ortamında denemek, veritabanı değişiklikleri gibi riskli işlerde hayat kurtarır.
  • Veritabanı göçleri: Kod geri alınabilir ama silinen bir sütun geri gelmez; göç betikleri dikkatle planlanmalıdır.
  • Bildirimler: Hat başarısız olduğunda ilgili kişiye e-posta veya mesajla haber gitmelidir.

WordPress siteleri için de CI/CD kurulabilir. Özel tema ve eklenti kodu Git’te tutulur, hat her gönderimde kod standartlarını kontrol eder ve dosyaları sunucuya aktarır. Veritabanı ve yüklenen medya ise ayrıca yönetilir.

Bu işi nasıl birlikte yaparız?

Mevcut projenize CI/CD eklemek ya da yeni bir projeyi baştan bu düzenle kurmak istiyorsanız süreci genellikle şu adımlarla yürütüyorum:

  1. Mevcut durumu dinlemek: Kod nerede duruyor, yayın şu an nasıl yapılıyor, en çok hangi hatalar yaşanıyor; bunları birlikte netleştiriyoruz.
  2. Kapsam ve teklif: Hangi testlerin yazılacağı, kaç ortam (test, staging, canlı) kurulacağı ve hangi aracın kullanılacağı yazılı olarak belirleniyor.
  3. Kurulum ve deneme: Hat önce test ortamında çalıştırılıyor, bilinçli olarak hatalı kod gönderilip yakalanıp yakalanmadığı kontrol ediliyor.
  4. Teslim ve destek: Ekibinize hattın nasıl okunacağını ve sürüm geri almanın nasıl yapılacağını gösteriyorum; dokümantasyon teslim ediliyor.

Projenizin yapısını konuşmak için iletişim sayfasından bana ulaşabilirsiniz.

Sık sorulan sorular

Küçük bir proje için CI/CD gerekli mi?

Tek kişinin geliştirdiği ve nadiren güncellenen bir sitede zorunlu değildir. Ancak düzenli güncellenen, ödeme veya sipariş alan her projede basit bir test ve yayın hattı bile hata riskini belirgin biçimde azaltır.

CI/CD ile DevOps aynı şey mi?

Hayır. DevOps, geliştirme ve operasyon ekiplerinin birlikte çalışmasını savunan daha geniş bir yaklaşımdır. CI/CD ise bu yaklaşımın en somut uygulama araçlarından biridir.

Otomatik yayın canlı siteyi bozarsa ne olur?

İyi kurulmuş bir hatta her sürüm saklanır ve önceki sürüme tek komutla dönülebilir. Ayrıca canlıya geçmeden önce staging ortamında deneme yapmak riski en aza indirir.

CI/CD kurmak ne kadar sürer?

Projenin büyüklüğüne, mevcut test altyapısına ve sunucu yapısına göre değişir. Testi hiç olmayan bir projede asıl zaman, anlamlı testleri yazmaya harcanır.

Sonuç

Özetle CI/CD nedir sorusunun cevabı şudur: yazılım değişikliklerini tahmin edilebilir, kayıtlı ve güvenli hâle getiren bir düzendir; daha az sürpriz, daha hızlı geliştirme ve kolay geri dönüş sağlar. Projeniz için uygun bir hat kurgulamak isterseniz bana yazmanız yeterli.