Sürekli Teslimat Nedir?

Sürekli Teslimat (Continuous Deployment- CD), yazılım geliştirme süreçlerinde, yapılan her değişikliğin hızlı, güvenli ve düzenli bir şekilde kullanıcıya ulaşmasını sağlamayı amaçlayan bir metodolojidir. Bu yöntemde, geliştirme, test ve dağıtım süreçleri mümkün olduğunca otomatik hale getirilir. CI/CD’nin bir parçası olan sürekli teslimat, yazılımın her zaman üretim ortamına gönderilmeye hazır olmasını sağlar.

Yazılım Geliştirme Süreçleri: Geleneksel Yaklaşım ve Sürekli Teslimat

Geleneksel Yaklaşımda geliştirilmek istenen yazılım, belirli kilometre taşları tamamlanana kadar geliştirilir. Uzun test süreçleri sonucunda büyük sürümler hazırlanır. Ancak bu yöntem genellikle karmaşık entegrasyon sorunları, büyük hata oranları ve zaman kaybı ile sonuçlanır.

Sürekli Teslimat Yaklaşımında ise her kod değişikliği bir yapı (build), test ve dağıtım sürecinden geçer. Yazılan her geliştirme sürekli olarak üretim benzeri bir ortamda test edilir. Sonrasında yazılım her zaman yayınlanmaya hazır hale getirilir.

Sürekli entegrasyon (Continuous Integration – CI) süreçlerinde geliştirilen her kod değişikliğini sürekli olarak birleştirip test edersiniz.

Fark:
Geleneksel yöntem, büyük ve karmaşık değişiklikler için uzun süreçler gerektirirken, sürekli teslimat küçük ve sık değişikliklerle süreci kolaylaştırır.

Sürekli Teslimatın Faydaları

  1. Daha Hızlı Pazara Sunum: Sürekli teslimat, fikirlerin hızla hayata geçirilmesini ve test edilmesini sağlar. Örneğin, bir uygulama özelliği aynı gün içinde üretime alınabilir.
  2. Daha Az Hata: Her değişiklik anında test edilip dağıtıldığından, hatalar erken tespit edilir. Büyük sürümlerde biriken entegrasyon sorunları yerine küçük ve yönetilebilir değişiklikler yapılır.
  3. Daha Güvenilir Süreçler: Üretime alınan değişikliklerin sürekli test edilmesi, güvenilirliği artırır. Hangi değişikliğin hangi soruna neden olduğu kolayca tespit edilir.

Sürekli Teslimat ve Dağıtım

Sürekli Teslimat (Continuous Delivery): Yazılım her zaman yayınlanmaya hazırdır. Dağıtım, genellikle bir insan onayı ile gerçekleştirilir.

Sürekli Dağıtım (Continuous Deployment): Dağıtım tamamen otomatik hale getirilir. Yeni bir kod parçası başarılı bir şekilde test edilirse, doğrudan üretime alınır. Amazon, Meta, Google gibi büyük şirketler bu yöntemi kullanır.

Fark:
Sürekli teslimatta, son adımda bir onay süreci bulunabilir; sürekli dağıtımda ise her şey otomatik olarak gerçekleşir.

DevOps ve Sürekli Teslimat: Yüksek Performans Göstergeleri

  • Hızlı Döngüler: Yüksek performans gösteren ekipler, değişiklikleri üretime bir saatten kısa sürede aktarabilir.
  • Daha Az Başarısızlık: Sürekli teslimat kullanan ekiplerin değişiklik başarısızlık oranı daha düşüktür.
  • Üretim Sorunlarının Çözülme Süresi: Üretim sorunlarından kurtulma süresi de belirgin bir şekilde azalır.

Örnek:
Bir yazılım ekibi, bir uygulamadaki veritabanı bağlantılarında bir sızıntı fark ediyor. Sürekli teslimat sayesinde:

  • Dağıtımlar ile veritabanı grafikleri karşılaştırılarak sorun tespit ediliyor.
  • Hangi kod değişikliğinin soruna neden olduğu hızla bulunuyor.
  • Birkaç saat içinde düzeltme yapılabiliyor.

Sürekli Teslimatın Süreci:

  1. Sürekli Entegrasyon (Continuous Integration): Kod, sık sık ana kod tabanına entegre edilir. Her entegre işlem, otomatik olarak test edilir.
  2. Otomatik Testler: Birim testler, entegrasyon testleri ve kabul testleri çalıştırılır.
  3. Üretim Benzeri Ortamda Dağıtım: Değişiklikler, bir test ortamında sürekli olarak dağıtılır ve doğrulanır.
  4. Son Onay veya Otomatik Dağıtım: Sürekli teslimatta, üretime geçmeden önce insan onayı gerekebilir. Sürekli dağıtımda, değişiklikler otomatik olarak üretime alınır.

Sürekli Teslimatın İşletmelere Katkısı

  1. Rekabet Avantajı: Değişikliklerin hızla üretime alınması, rakiplere karşı avantaj sağlar.
  2. Daha Yüksek Kalite: Sürekli test edilen yazılım, daha az hata içerir ve daha kararlıdır.
  3. Maliyet Azaltma: Süreçler otomatikleştirildiğinden, manuel müdahale ve insan hataları azalır.

Sürekli teslimat, yazılım geliştirme süreçlerinde hız, güvenilirlik ve kaliteyi artırır. DevOps’un temel prensiplerinden biri olan bu yöntem, büyük ölçekteki şirketlerden küçük ekiplere kadar her seviyede etkili sonuçlar sağlar. Sürekli teslimatı uygulayan bir ekip, pazara daha hızlı çıkar, hataları daha çabuk tespit eder ve üretim süreçlerini daha güvenli hale getirir.

Sürekli Entegrasyon İçin Altı Uygulama ve Temel Kavramlar

Sürekli entegrasyon (CI), yazılım geliştirme süreçlerini hızlandıran, hata oranını düşüren ve kodun her zaman çalışır durumda kalmasını sağlayan bir yaklaşımdır. Bu sürecin başarısını artırmak için belirli prensiplere uyulması gerekir.

  1. Derlemeleri Hızlı Tutun

Derleme işleminin hızlı olması, ekip üyelerinin sık sık küçük değişiklikler yapmasını teşvik eder. Uzun süren derlemeler, değişikliklerin birikmesine yol açar ve bu da entegrasyon sorunlarını artırır.

  • Hedef: Bir derleme işlemi, “kahve testi” denilen süre içinde (yaklaşık 5 dakika) tamamlanmalıdır. Hızlı derlemeler, geliştiricilerin değişikliklerini hemen test etmelerini ve entegre etmelerini sağlar.
  1. Küçük Değişiklikler Yapın

Büyük kod değişiklikleri, birleştirme ve test süreçlerinde daha fazla hata ve sorun çıkarır. Küçük değişiklikler, ekiplerin kodu kolayca gözden geçirmesini ve hataları izole etmesini sağlar.

Böylece kod gözden geçirme süreçleri daha basit olur ve başarısızlıklar kolayca tespit edilir ve düzeltilir.

3.Derlemeyi Bozuk Bırakmayın

Derleme bozulduğunda, diğer ekip üyelerinin çalışmasını engelleyebilir. Bu, teslimat sürecinde gecikmelere neden olur.

  • Hedef: Derleme bozulursa, ekip derhal çalışmayı durdurmalı ve derlemeyi düzeltmelidir.
    Bu yaklaşım, ekibin disiplinini ve teslimat kültürünü güçlendirir.
  1. Gövde Tabanlı Geliştirme Akışı Kullanın

Dal Tabanlı Yaklaşım (Branch-Based Development):

  • Her geliştirici, ana kod tabanından (gövde) bir dal oluşturur ve uzun süre üzerinde çalışır.
  • Dal sonunda ana gövdeyle birleştirilir. Ancak, dalların uzun süre ayrı kalması büyük birleştirme sorunlarına neden olabilir.

Gövde Tabanlı Yaklaşım (Trunk-Based Development):

  • Geliştiriciler, küçük değişikliklerini günlük olarak ana kod tabanına ekler.
  • Kod, sık sık entegre edildiği için herkes aynı kod tabanında güncel kalır.

Özellik Bayrakları (Feature Flags):
Henüz tamamlanmamış veya yayınlanmaya hazır olmayan özellikler için, uzun süreli dallar yerine bayraklar kullanılır. Kodda hangi özelliklerin aktif olup olmayacağını kontrol ederek sürekli entegrasyonu kolaylaştırır.

Böylece kod çatışmaları azalır. Kodun düzenli olarak test edilmesi ve entegre edilmesi sağlanır ve yazılım geliştirme süreci daha hızlı ve güvenilir hale gelir.

  1. Kararsız Otomatik Testlere İzin Vermeyin

Kararsız testler, bazen geçen, bazen başarısız olan testlerdir. Bu durum, CI sistemine olan güveni zedeler ve süreçlerin güvenilirliğini düşürür. Bu sebeple kararsız testler tespit edilmeli ve hızlı bir şekilde düzeltilmelidir. Gerekirse, bu testler CI sürecinden çıkarılmalıdır. Böylece CI sürecinin güvenilirliğini artırır ve ekiplerin süreçlere olan güvenini korur.

  1. Yapıdan Üç Şey Döndürün: Durum, Günlük ve Yapı
  2. Durum (Status): Yapının başarılı mı (pass) yoksa başarısız mı (fail) olduğunu belirten bir çıktı sağlar. Genellikle kırmızı (başarısız) ve yeşil (başarılı) gibi görsel göstergelerle ifade edilir.
  3. Günlük (Log): Derleme ve test süreçlerinin detaylarını içerir:
    • Hangi testler çalıştırıldı?
    • Hangi hatalar tespit edildi?
  • Geliştiriciler, bu günlükleri inceleyerek sorunları hızlıca çözebilir.
  1. Yapı (Artifact): Test edilmiş ve dağıtıma hazır bir uygulama sürümüdür. Sürüm numarasıyla etiketlenir ve bir depolama alanına gönderilir (örneğin, Docker Hub veya Azure Artifacts).
  • Dönüşlerin Önemi:
    Bu çıktılar CI/CD araçları tarafından geliştiricilere ve ekip liderlerine sağlanır:

    • Durum ve Günlük: Hataların hızlıca bulunmasını sağlar.
    • Yapı: Üretim ortamına güvenilir bir yazılım sürümü sağlar.

Sürekli Entegrasyon ve Bu Prensiplerin Önemi

Sürekli entegrasyonun etkili olması, bu altı uygulamanın disiplinli bir şekilde uygulanmasına bağlıdır:

  1. Derlemelerin hızlı olması, geliştiricilerin sık değişiklik yapmasını destekler.
  2. Küçük değişiklikler, entegrasyon ve test süreçlerini kolaylaştırır.
  3. Bozuk bir derleme hemen düzeltilir, böylece ekipler arasında verimlilik sağlanır.
  4. Gövde tabanlı geliştirme, kod entegrasyonunu hızlandırır ve özellik bayrakları, yayınlanmamış özellikleri yönetmeyi kolaylaştırır.
  5. Kararsız testlerin engellenmesi, CI sisteminin güvenilirliğini artırır.
  6. Durum, günlük ve yapı gibi çıktılar, süreçlerin izlenebilirliğini ve güvenilirliğini artırır.

Bu uygulamalar, yalnızca CI sürecini değil, genel yazılım geliştirme ve teslimat süreçlerini daha hızlı, daha güvenilir ve daha verimli hale getirir.

 

İlgili İçerikler

Sürekli Teslimat İçin Beş Temel Uygulama

Sürekli teslimat (Continuous Delivery- CD), yazılım geliştirme sürecinde değişikliklerin...

Kod Olarak Altyapı ve DevOps Süreçlerindeki Rolü

DevOps dünyasının modern yaklaşımlarından biri olan Kod Olarak Altyapı...

DevOps’un Temelleri: Agile, Lean, Visible Ops ve ITIL

DevOps, modern organizasyonların hız, kalite ve iş birliği hedeflerini...

DevOps Kültürüne Neden İhtiyacımız Var?

Teknoloji dünyasında yıllardır BT departmanlarının iş süreçleriyle uyum sağlayamaması,...

DevOps Nedir?

Devops ifadesini seneler önce gittiğim bir eğitimde görmüştüm. Development...

İncelemelerim