Sürekli teslimat: yazılımı her an yayına hazır tutmak
Sözlük

Sürekli teslimat: yazılımı her an yayına hazır tutmak

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 3 dk okuma

Sürekli teslimat, her kod değişikliğini otomatik testlerden geçirip canlıya çıkmaya hazır tutma yaklaşımıdır. Sürekli dağıtımdan farkı, akış ve örnek.

Sürekli teslimat nedir?

Sürekli teslimat (continuous delivery), yazılıma yapılan her değişikliğin otomatik olarak derlenip test edildiği ve sonunda canlı ortama çıkarılabilecek durumda bekletildiği bir çalışma biçimidir. Amaç, yayına çıkmayı büyük ve riskli bir olay olmaktan çıkarıp sıradan bir iş haline getirmektir. Yazılım her an yayına hazır olduğu için canlıya çıkma kararı teknik bir engelden değil, iş tarafının tercihinden doğar.

Sürekli teslimat tek başına bir araç değildir. Otomatik testleri, tekrarlanabilir bir paketleme sürecini, ortamların benzer biçimde kurulmasını ve küçük değişikliklerle ilerleme alışkanlığını birlikte gerektirir. Bu yüzden DevOps kültürünün en somut uygulamalarından biri olarak anılır.

Teslimat boru hattı nasıl çalışır?

Çalışma düzeninin kalbinde teslimat boru hattı (delivery pipeline) vardır. Bir geliştirici değişikliğini ortak koda eklediğinde boru hattı kendiliğinden başlar ve aşamaları sırayla işletir:

  • Derleme ve paketleme: kod çalıştırılabilir bir pakete dönüştürülür; aynı paket sonraki tüm aşamalarda kullanılır.
  • Otomatik testler: birim testleri, entegrasyon testleri ve gerekiyorsa güvenlik taramaları koşar.
  • Test ortamına yerleştirme: paket, canlıya benzeyen bir ortama kurulur ve daha geniş kapsamlı kontrollerden geçer.
  • Onay ve yayın: tüm kontroller geçtiyse paket canlıya çıkmaya hazırdır. Canlıya alma düğmesine bir kişi basar.

Boru hattının herhangi bir aşaması kırmızıya dönerse paket ilerlemez ve ekip sorunu o anda düzeltir. Hatalar böylece birikmek yerine kaynağına yakın yakalanır.

Sürekli teslimat ile sürekli dağıtım arasındaki fark

CD kısaltması birbirinden farklı kavramlar için kullanılır ve bu sık karışıklığa yol açar. Sürekli teslimatta canlıya çıkış kararı insandadır: boru hattı paketi hazır tutar, yetkili kişi uygun anda yayını başlatır. Sürekli dağıtımda (continuous deployment) bu son adım da otomatiktir: testlerden geçen her değişiklik hiçbir elle onay olmadan canlıya gider.

Sürekli dağıtım, güçlü test kapsamı ve hızlı geri alma yeteneği ister. Düzenlemeye tabi sektörlerde ya da yayın zamanlamasının iş açısından önemli olduğu ürünlerde çoğu ekip, sürekli teslimatta durup son kararı insana bırakmayı tercih eder. Her ikisi de aynı temele dayanır; fark yalnızca son adımda kimin karar verdiğidir.

Küçük bir örnek

Örneğin bir e-ticaret ekibi ödeme sayfasındaki bir hatayı düzeltiyor. Geliştirici düzeltmeyi ortak koda ekler. Boru hattı kodu derler, testleri koşar, paketi test ortamına kurar ve sayfanın temel akışını otomatik bir senaryoyla dener. Hepsi başarılı olunca sistem paketi yayına hazır olarak işaretler.

Ürün sorumlusu, kampanya trafiğinin düşük olduğu bir saati seçip yayın düğmesine basar. Bir sorun çıkarsa önceki sürüme dönmek de aynı otomasyonla yapılır. Sürekli teslimat olmasaydı aynı düzeltme, toplu bir sürüm paketinin içinde haftalarca beklemek zorunda kalabilirdi.

Sürekli teslimatın ilişkili kavramlarla bağı

Sürekli entegrasyon (CI), teslimat hattının ilk yarısıdır: kodun sık sık birleştirilip otomatik doğrulanmasını sağlar. Sürekli teslimat bunun devamında paketi ortamlara taşır. Bu ikili çoğu zaman CI/CD olarak birlikte anılır.

Trunk-based development, kısa ömürlü dallarla ana dala sık birleştirme disiplinidir ve teslimat hattını besler. Mavi-yeşil dağıtım ve kanarya yayını ise canlıya çıkışı daha güvenli yapan yayın stratejileridir. GitOps, ortam yapılandırmasının da sürüm kontrolünde tutulup otomatik uygulanmasını önerir. Bu kavramlar birbirini tamamlar; sürekli teslimat hepsinin ortak hedefidir.

Sık yapılan hatalar ve nerede kullanılır?

En yaygın hata, testleri zayıf bırakıp yalnızca dağıtımı otomatikleştirmektir. Test güvencesi olmayan otomasyon, hataları daha hızlı canlıya taşır. Bir diğer hata, test ve canlı ortamının birbirinden farklı kurulmasıdır; testte çalışan paket canlıda başka davranır. Uzun ömürlü dallar ve büyük toplu değişiklikler de hattı yavaşlatır.

Sürekli teslimat web uygulamalarında, mobil uygulamalarda, bulut hizmetlerinde ve sık güncellenen kurumsal yazılımlarda kullanılır. Hedef, sık ve küçük sürümlerle hem hız hem de güvenilirlik kazanmaktır.

Bu konuya çalışmak isteyen DevOps, platform ve yazılım ekipleri için Mindset'te 'DevOps Temelleri' programında 'Sürekli Teslimat ve Dağıtım' modülü, 'SAFe DevOps Practitioner' programında 'Sürekli Dağıtım ve Yayın Stratejisi' modülü, Azure ortamı kullananlar için de 'Azure DevOps ile Uçtan Uca Yazılım Teslimatı' içinde 'Sürekli Teslimat ve Ortam Yönetimi' modülü bulunur.

İlgili Mindset programı

DevOps Temelleri

Sık sorulanlar

Sık sorulan sorular

Sürekli teslimat için hangi araçlar kullanılır?

Boru hattı kurmak için Jenkins, GitLab CI, GitHub Actions ve Azure Pipelines gibi araçlar yaygındır. Seçim ekibin kod barındırma platformuna ve bulut sağlayıcısına göre değişir. Araçtan önemlisi, testlerin güvenilir olması ve her aşamanın tekrarlanabilir biçimde otomatikleştirilmesidir.

Küçük bir ekip sürekli teslimata geçebilir mi?

Evet, küçük ekipler çoğu zaman daha rahat geçer, çünkü koordinasyon yükü azdır. Önce otomatik derleme ve birkaç temel testle başlanır, ardından test ortamına otomatik yerleştirme eklenir. Hat adım adım olgunlaştıkça yayın süreci kendiliğinden hızlanır.

Sürekli teslimat ürün kalitesini düşürür mü?

Doğru kurulduğunda tersine, kaliteyi artırır. Değişiklikler küçük olduğundan hatanın kaynağı kolay bulunur ve geri alma hızlıdır. Kaliteyi düşüren şey hızın kendisi değil, test güvencesi olmadan hızlanmaktır. Bu nedenle otomatik testler hattın vazgeçilmez parçasıdır.

Sürekli teslimat yalnızca yazılım ekiplerini mi ilgilendirir?

Uygulama tarafı yazılım ve operasyon ekiplerindedir, ancak yayın zamanlamasına ürün ve iş birimleri karar verir. Sürekli teslimatta yayın kararı iş tarafında kaldığı için bu birimlerin de hattın nasıl çalıştığını bilmesi, ortak planlamayı kolaylaştırır.

Sürekli Teslimat (Continuous Delivery) Nedir?