CI/CD Nedir? Kesintisiz Dağıtım (Zero-Downtime) İçin Pratik Rehber
CI/CD ile yazılım güncellemeleri hızlı, güvenli ve kesintisiz yayına alınır. Sürekli entegrasyon ve dağıtımın temellerini, blue-green ve canary stratejilerini ve veritabanı göçlerinde dikkat edilmesi gerekenleri anlattık.
Yeni bir özelliği yayına almak, birçok ekip için hâlâ gece yarısı yapılan, herkesin nefesini tuttuğu bir operasyon. Oysa doğru kurulmuş bir CI/CD hattıyla güncellemeler gün içinde, kullanıcılar fark etmeden ve gerektiğinde dakikalar içinde geri alınabilecek şekilde yayına alınabilir. Bu rehberde CI/CD'nin temellerini ve kesintisiz dağıtım (zero-downtime deployment) stratejilerini ele alıyoruz.
CI/CD nedir?
CI (Continuous Integration — Sürekli Entegrasyon): Geliştiricilerin kod değişikliklerini sık sık ortak depoya birleştirmesi ve her birleştirmede kodun otomatik olarak derlenip test edilmesidir. Amaç, hataları erken ve küçükken yakalamaktır.
CD (Continuous Delivery / Deployment — Sürekli Teslim / Dağıtım): Testten geçen kodun otomatik olarak yayına hazır hale getirilmesi (delivery) ya da doğrudan yayına alınmasıdır (deployment).
Tipik bir CI/CD hattı
- Kod gönderimi: Geliştirici değişikliği bir dala gönderir ve birleştirme isteği (pull request) açar.
- Derleme: Uygulama derlenir, bağımlılıklar kurulur.
- Otomatik testler: Birim, entegrasyon ve gerekiyorsa uçtan uca testler çalışır.
- Statik analiz ve güvenlik taraması: Kod kalitesi, bağımlılık açıkları ve gizli anahtar sızıntıları kontrol edilir.
- Paketleme: Uygulama, sürüm numarasıyla etiketlenmiş bir konteyner imajı gibi değişmez bir pakete dönüştürülür.
- Test ortamına dağıtım: Paket önce staging ortamında denenir.
- Canlıya dağıtım: Onaylanan paket, seçilen stratejiyle canlıya alınır.
Önemli ilke: canlıya giden paket, test edilen paketle birebir aynı olmalıdır. Her ortam için yeniden derleme yapmak, "testte çalışıyordu" sorununun en yaygın nedenidir.
Kesintisiz dağıtım stratejileri
Rolling (kademeli) güncelleme
Uygulamanın kopyaları tek tek yeni sürümle değiştirilir. Her yeni kopya sağlık kontrolünden geçmeden eskisi kapatılmaz. Kubernetes'in varsayılan stratejisidir ve çoğu servis için yeterlidir.
Blue-green dağıtım
Canlı ortamın (blue) yanında yeni sürümle ikinci bir ortam (green) kurulur. Testler tamamlanınca trafik tek seferde yeni ortama yönlendirilir. Sorun çıkarsa trafik eski ortama geri çevrilerek anında geri dönülür. Dezavantajı, geçiş süresince iki kat kaynak gerektirmesidir.
Canary dağıtım
Yeni sürüm önce trafiğin küçük bir kısmına (ör. %5) açılır. Hata oranı, yanıt süresi gibi metrikler izlenir; sorun yoksa oran kademeli olarak artırılır. Metrikler belirlenen eşiği aşarsa dağıtım otomatik olarak geri alınabilir. Yüksek trafikli ve kritik sistemlerde riski en aza indiren yöntemdir.
| Strateji | Geri dönüş hızı | Ek kaynak ihtiyacı | Uygun olduğu durum |
|---|---|---|---|
| Rolling | Orta | Düşük | Çoğu servis |
| Blue-green | Çok hızlı | Yüksek (geçici) | Anında geri dönüş gerektiğinde |
| Canary | Hızlı | Düşük–orta | Kritik, yüksek trafikli sistemler |
Veritabanı göçlerinde dikkat
Kesintisiz dağıtımın en zor kısmı genellikle uygulama değil, veritabanı şemasıdır. Dağıtım sırasında eski ve yeni sürüm bir süre aynı anda çalışacağından şema değişiklikleri iki sürümle de uyumlu olmalıdır. Bunun için "genişlet ve daralt" (expand and contract) yaklaşımı kullanılır:
- Genişlet: Yeni kolonu ya da tabloyu ekleyin; eskisini silmeyin.
- Taşı: Uygulama hem eski hem yeni yapıyla çalışacak şekilde güncellenir, veri taşınır.
- Daralt: Eski sürüm tamamen devreden çıktıktan sonra artık kullanılmayan kolonu kaldırın.
Bir kolonu tek adımda yeniden adlandırmak ya da silmek, dağıtım sırasında çalışan eski sürümü bozar.
Gözlemlenebilirlik olmadan kesintisiz dağıtım olmaz
Bir dağıtımın başarılı olup olmadığını anlamak için şunları izleyin:
- Hata oranı ve HTTP 5xx yanıtları
- Yanıt süreleri (özellikle p95 / p99)
- Uygulama logları ve iş metrikleri (ör. tamamlanan sipariş sayısı)
Bu metrikler dağıtım hattına bağlandığında, sorunlu bir sürüm insan müdahalesi beklemeden geri alınabilir.
Nereden başlamalı?
- Önce CI ile başlayın: her birleştirme isteğinde otomatik derleme ve test.
- Ardından staging ortamına otomatik dağıtımı ekleyin.
- Canlı dağıtımı tek komuta indirin, sonra rolling ya da canary stratejisine geçin.
- Geri alma (rollback) adımını düzenli olarak deneyin; hiç denenmemiş bir geri alma planı, plan değildir.
Sonuç
CI/CD, yazılım teslimini hızlandırmanın yanında riski de azaltır: küçük ve sık değişiklikler, büyük ve seyrek sürümlerden çok daha güvenlidir. Doğru dağıtım stratejisi, şema uyumluluğu ve iyi bir gözlemlenebilirlik ile güncellemeler kullanıcılar fark etmeden yayına alınabilir.
CI/CD hattı kurulumu, Kubernetes ve kesintisiz dağıtım süreçleri için DevOps & bulut mimarisi hizmetlerimizi inceleyebilir ya da bize ulaşabilirsiniz. Maliyet tarafını merak ediyorsanız bulut maliyetlerini düşürmenin 9 yolu yazımıza da göz atın.