Modern Yazılım Geliştirme Dünyasında Kullanılan Sürekli Entegrasyon/Sürekli...

Modern Yazılım Geliştirme Dünyasında Kullanılan Sürekli Entegrasyon/Sürekli Teslimat (CI/CD) Yaklaşımı Nedir?

Bu yazımızda modern yazılım dünyasının vazgeçilmezi olan CI/CD yaklaşımından bahsediyoruz.
Merve Özdeş02 Ara 2022

Yazılım geliştirme dünyasındaysanız ya da yazılım geliştirme ile ilgiliyseniz mutlaka sürekli entegrasyon/sürekli teslimat (Continuous Integration/Continuous Delivery-Deployment , CI/CD) kavramları ile karşılaşmışsınızdır. Bu yazımda size modern yazılım dünyasının vazgeçilmezi olan CI/CD yaklaşımından bahsedeceğim.
                  

Çok basit bir ifadeyle CI, artımlı kod değişikliklerinin sık ve güvenilir bir şekilde yapıldığı modern bir yazılım geliştirme uygulamasıdır. CI tarafından tetiklenen otomatik oluşturma ve test adımları, havuzla birleştirilen kod değişikliklerinin güvenilir olmasını sağlar. Kod daha sonra CD sürecinin bir parçası olarak hızlı ve sorunsuz bir şekilde teslim edilir. Yazılım dünyasında CI/CD ardışık düzeni, geliştiricilerin artımlı kod değişikliklerinin hızlı ve güvenilir bir şekilde üretime teslim edilmesini sağlayan otomasyonu ifade eder.  Bu ardışık düzendeki sürekli entegrasyon (CI) ve sürekli teslimat-dağıtım (CD) kavramlarını açıklayalım:

 

Sürekli entegrasyon (CI: Continuous integration)

Modern uygulama geliştirmede hedef, eş zamanlı olarak bir uygulamanın farklı kısımlarını geliştirmek için çalışan birden fazla geliştiriciye sahip olmaktır. Fakat organizasyon, kaynak kodun farklı dallarını tek bir günde bir araya getirmek istediğinde bu iş can sıkıcı ve zaman alıcı olabilir. Çünkü tek başına çalışan bir geliştirici uygulama üzerinde değişiklik yapmak istediğinde diğer geliştiriciler tarafından yapılan değişikliklerle çakışma olabilir. Ekip, bulut tabanlı bir IDE üzerinde çalışmak yerine her geliştiricinin kendi yerel entegre geliştirme ortamını (IDE) özelleştirdiyse, bu sorun daha da karmaşık hale gelebilir. İşte tam bu noktada sürekli entegrasyon sorunlarınızı çözmenizde güzel bir yaklaşımdır. Peki, sürekli entegrasyon tam olarak nedir? 

Sürekli entegrasyon, geliştirme ekiplerini sık sık küçük kod değişikliklerini uygulamaya ve bunları bir sürüm kontrol havuzuna teslim etmeye yönlendiren bir kodlama felsefesi ve uygulamalar dizisidir. Daha önce de belirttiğim gibi çoğu modern uygulama, çeşitli platformlar ve araçlar kullanarak farklı geliştiriciler tarafından kod geliştirmeyi gerektirir. Bu nedenle ekiplerin değişiklikleri entegre etmek ve doğrulamak için tutarlı bir mekanizmaya ihtiyacı vardır. Sürekli entegrasyon; uygulamaları oluşturmak, paketlemek ve test etmek için otomatik bir yol oluşturur.

Sürekli entegrasyonun sağladığı birçok avantaj vardır. İlk olarak tutarlı bir entegrasyon sürecine sahip olmak, geliştiricileri kod değişikliklerini daha sık gerçekleştirmeye teşvik ederek daha iyi işbirliği ve kod kalitesine yol açar. Geliştirilen uygulamanın sıkça test edilmesi, hatalar ve güvenlik sorunlarının yazılım geliştirme yaşam döngüsünde daha kolay ve çok daha erken bir zamanda belirlenip giderilmesini sağlar. Değişiklikleri sık sık birleştirerek ve otomatik test ve doğrulama süreçlerini tetikleyerek aynı uygulama üzerinde çalışan birden fazla geliştirici olsa bile kod çakışması olasılığı en aza indirilir. CI süreçleri, değişiklikleri izleyen bir sürüm kontrol sistemine sahip olmalıdır, böylece kullanılan kodun sürümüne kolayca ulaşılabilir. 

 

Sürekli teslimat-dağıtım (CD: Continuous delivery-deployment)

Sürekli entegrasyon sürecinin bittiği yerde başlayan sürekli teslimat, altyapı sağlama ve uygulamanın teslimat sürecini otomatikleştiren bir yazılım geliştirme uygulamasıdır. Kod, CI sürecinin bir parçası olarak test edilip oluşturulduktan sonra, herhangi bir zamanda herhangi bir ortama dağıtmak için son aşamalarda sürekli teslimat devreye girer. Sürekli teslimat, altyapının sağlanmasından uygulamanın test veya üretim ortamına dağıtılmasına kadar her şeyi kapsayabilir. Yapıların ve birim otomasyonunun ve CI'deki entegrasyon testlerinin ardından sürekli teslimat, bu doğrulanmış kodun bir havuza bırakılmasını otomatik hale getirir. Bu nedenle, etkili bir sürekli teslimat sürecine sahip olmak için geliştirme hattınızda CI'nin zaten yerleşik olması önemlidir. Sürekli teslimatın amacı, bir üretim ortamına dağıtım için her zaman hazır olan bir kod tabanına sahip olmaktır. 

Bazı kaynaklarda yalnızca sürekli teslimat olarak bahsedilirken bazılarında sürekli teslimat ve sürekli dağıtım olarak bahsedilmektedir. Ancak sürekli teslimat ve sürekli dağıtım arasında ufak bir farklılık vardır. Sürekli dağıtım, sürekli teslimatın bir adım ilerisi olarak düşünülebilir. Sürekli dağıtımda üretim hattının tüm aşamalarından geçen her değişiklik müşterilere hiçbir insan müdahalesi olmadan otomatik olarak iletilir.

 

Görsel Kaynağı

 

Peki, sürekli teslimat ve sürekli dağıtımın sağladığı avantajlar nelerdir? Sürekli teslimat ve dağıtım ile daha sık yayın yapıldığı için müşterilerle olan geri bildirim döngüsü daha hızlıdır ve tek bir yayınlanma günü olmadığından ekip üzerinde ekstra bir baskı yoktur.  Küçük değişiklikler için kararlar üzerinde çok daha az baskı vardır, bu nedenle daha hızlı yinelemeyi teşvik eder. Yapılan sık yayınlar sayesinde kalite de uzun aralıklardan ziyade her gün artmış oluyor.

 

CI/CD araçları

Yukarıda bahsettiğimiz CI/CD süreçlerini bir arada yönetebileceğiniz, yaygın olarak kullanılan çeşitli araçlar mevcuttur. CI/CD için en iyi bilinen açık kaynak araçlarından biri Jenkins'dir. CI/CD için kullanılan diğer araçlardan bazıları:

  • CircleCI 
  • TeamCity
  • Bamboo
  • GitLab
  • Buddy
  • TravisCI
  • CodeShip
  • GoCD
  • Wercker
  • Semaphore

Bu yazımızda tekrar eden işleri otomatize etmemize olanak sağlayan, tüm testlerin kontrolünü sağlayarak kaliteyi arttıran ve büyük projelerde insan gücünden ve zamandan tasarruf edilmesine imkan tanıyan CI/CD süreçlerine değindik. Keyifli okumalar.

 

Kaynaklar

İlginizi Çekebilir
Miuul topluluğunun bir parçası ol!

Abone ol butonuna tıklayarak Miuul'dan pazarlama ve haber içerikleri almayı onaylıyorum.