DevOps ve CI/CD

DevOps ve CI/CD Nedir? Temel Kavramlar

Yazılımı geliştiren ve işleten ekipler DevOps yaklaşımında ortak sorumluluk alır. CI/CD ise değişiklikleri otomatik kontrollerden geçirir; sürekli teslimat ile dağıtım arasındaki ayrım, canlıya geçiş kararında ortaya çıkar.

Cloud Teknik Editörlüğü · 5 dk okuma
Modern bir çalışma alanında, soyut bir yazılım teslimat akışı gösteren dizüstü bilgisayarın yanında duran sunucu rafı
Bu yazıda neler var?
  1. DevOps ve CI/CD Birlikte Nasıl Çalışır?
  2. Sürekli Entegrasyon (CI) Ne Yapar?
  3. Sürekli Teslimat ve Sürekli Dağıtım Arasındaki Fark
  4. Örnek Bir CI/CD Pipeline Nasıl İşler?
  5. Hangi Yaklaşımı ve Aracı Seçmelisiniz?
  6. Sık Yapılan Hatalar ve Çözümleri
  7. Pipeline'ı İzleme ve İyileştirme

DevOps, yazılımı geliştiren ve işleten ekiplerin ortak çalıştığı bir yaklaşım ve uygulamalar bütünüdür. CI/CD, kod değişikliklerini otomatik olarak derleyip test eder ve yayın sürecine taşır. Sürekli teslimat, sürümü yayınlanmaya hazırlar; sürekli dağıtım ise başarılı değişiklikleri ek bir manuel onay olmadan canlıya alır.

DevOps ve CI/CD Birlikte Nasıl Çalışır?

DevOps, ekiplerin yazılımı geliştirme, yayınlama ve işletme sorumluluğunu paylaşmasını sağlar. Bu yaklaşım iş birliğini, otomasyonu, izlemeyi ve güvenliği kapsar. CI/CD ise bu işlerin içindeki kod kontrolü ve yayın akışını otomatikleştirir.

Geliştirici ortak depoya kod gönderdiğinde bir pipeline başlar. Pipeline, tanımlanmış adımları sırayla çalıştırır. Derleme, test, güvenlik kontrolü ve dağıtım bu adımlara örnek verilebilir. Her proje aynı adımları kullanmak zorunda değildir; ekip, hedef ortama ve uygulamaya göre akışı belirler.

Pipeline sonuçlarını geliştirme ve işletme ekipleri birlikte izler. Bir kontrol başarısız olursa akış sonraki adıma geçmeden durabilir. Böylece ekipler hatayı hangi aşamada bulduğunu görür ve sürüm kararını test sonuçlarına göre verir.

Sürekli Entegrasyon (CI) Ne Yapar?

CI, geliştiricilerin kod değişikliklerini ortak depoda sık sık birleştirmesine dayanır. Her değişiklikte otomatik derleme ve test kontrolleri çalışır. Bu kontroller, hataları değişiklik yapılırken görünür kılar ve ekiplerin aynı kod tabanı üzerinde çalışmasını kolaylaştırır.

Bir CI akışında bağımlılıkları kurun, uygulamayı derleyin ve testleri çalıştırın. Projenize uygun kod analizini de kontrol adımı olarak ekleyin. Kontroller başarısızsa sonucu değişiklik kaydında gösterin ve sorunu giderene kadar sonraki aşamayı durdurun.

CI başarısı, uygulamanın canlı ortama çıktığı anlamına gelmez. Bu sonuç yalnızca tanımladığınız kontrollerin tamamlandığını gösterir. Canlıya geçiş için ayrıca teslimat ya da dağıtım adımlarını yapılandırın.

Sürekli Teslimat ve Sürekli Dağıtım Arasındaki Fark

CD kısaltması, sürekli teslimat veya sürekli dağıtım anlamında kullanılır. İki yöntemde de değişiklikler otomatik kontrollerden geçer. Fark, başarılı sürümün canlı ortama nasıl taşındığı noktada ortaya çıkar.

YaklaşımBaşarılı kontrollerden sonraCanlıya geçiş
Sürekli teslimatSürüm yayınlanmaya hazır olurİnsan onayı veya manuel işlem gerekebilir
Sürekli dağıtımSürüm canlı ortama alınırEk bir manuel onay olmadan otomatik ilerler

Sürekli teslimatta ekip, canlıya çıkış zamanını ayrıca seçebilir. Sürekli dağıtımda ise tanımlı kontrolleri geçen değişiklik otomatik olarak canlıya gider. Bu nedenle canlıya geçiş kararının kimde olduğunu ve hangi koşulda çalıştığını pipeline içinde açıkça belirtin.

Örnek Bir CI/CD Pipeline Nasıl İşler?

Bir web uygulamasında kod depoya gönderildiğinde CI akışını başlatın. Önce bağımlılıkları kurun, uygulamayı derleyin ve otomatik testleri çalıştırın. Kontroller geçerse sürümü test ortamına dağıtın. Böylece canlıya çıkmadan önce uygulamanın çalışmasını inceleyin.

CI/CD akışını ve test ortamına dağıtımı gösteren geliştirici çalışma alanı
Başarılı testler, uygulamanın test ortamına dağıtılmasını sağlar.
  1. Kod değişikliğini ortak depoya gönderin.
  2. Derleme ve otomatik test kontrollerini çalıştırın.
  3. Başarılı sürümü test ortamına dağıtın.
  4. Test ortamındaki sonucu kontrol edin ve gerekiyorsa onay alın.
  5. Sürümü canlı ortama dağıtın ve çalışma durumunu izleyin.

Bu akış, canlıya geçişte onay veya manuel işlem varsa sürekli teslimat örneğidir. Dördüncü adımı kaldırıp canlı dağıtımı başarılı kontrollere bağlarsanız sürekli dağıtım akışı kurarsınız. Test ve canlı ortamı ayrı hedefler olarak tanımlayın. Sunucu seçimini planlarken VPS'in temel özelliklerini değerlendirin.

Hangi Yaklaşımı ve Aracı Seçmelisiniz?

Birden fazla geliştirici aynı kod deposuna katkı veriyorsa CI ile başlayın. Önce derleme ve test adımlarını otomatikleştirin. Canlıya çıkmadan önce sürümü gözden geçirmek istiyorsanız onay içeren sürekli teslimat akışı kurun.

Kontroller başarılı olduğunda canlıya otomatik geçiş istiyorsanız sürekli dağıtımı değerlendirin. Bu yöntemde dağıtım öncesi kontrolleri ve akışın ne zaman duracağını açıkça tanımlayın. Kubernetes kullanan ekipler dağıtım adımlarını mevcut Kubernetes kaynaklarıyla eşleştirebilir. Pod ve Deployment ilişkisi için Kubernetes yapısına bakın.

GitHub Actions, GitLab CI/CD ve Jenkins, pipeline kurmak için kullanılan araçlardır. Önce deponuzun, testlerinizin ve dağıtım hedefinizin gereksinimlerini yazın. Ardından bu adımları destekleyen aracı seçin. Araç, DevOps yaklaşımının kendisi değil; akışınızı çalıştıran bileşenlerden biridir.

Sık Yapılan Hatalar ve Çözümleri

DevOps'u yalnızca bir görev unvanı veya yazılım aracı olarak tanımlamak, yaklaşımın kapsamını daraltır. Ekip iş birliğini, otomasyonu, izlemeyi ve güvenliği de çalışma sürecine katın. CI/CD'yi de DevOps'un tamamı gibi sunmayın; bu süreç, yazılımı kontrol etme ve yayınlama adımlarına odaklanır.

  • CI sonucunu canlı yayın sanmak: Derleme ve testten sonra ayrı bir dağıtım aşaması tanımlayın.
  • Test ve canlı ortamı karıştırmak: Pipeline'da her ortamı ayrı hedef olarak adlandırın.
  • Onay sorumluluğunu belirsiz bırakmak: Canlıya çıkışı kimin başlatacağını veya hangi kontrollerin tetikleyeceğini belirtin.
  • Başarısız kontrolü görmezden gelmek: Hata sonucunu görünür tutun ve sorun çözülmeden akışı ilerletmeyin.

Pipeline aşamalarını ekipçe belirleyin ve her adımın sonucunu izleyin. Bu düzen, hata çıktığında hangi kontrolün başarısız olduğunu bulmayı kolaylaştırır. Akışa yalnızca projenizin gerektirdiği adımları ekleyin; gereksiz kontroller bakım yükünü artırır.

Pipeline'ı İzleme ve İyileştirme

Pipeline'ı kurduktan sonra her aşamanın başarılı veya başarısız sonucunu takip edin. Derleme, test ve dağıtım durumlarını ekip üyelerinin görebileceği yerde tutun. Böylece sorunlu adımı belirleyip ilgili değişikliği inceleyebilirsiniz.

Bir kontrol sık sık başarısız oluyorsa önce hata mesajını ve ilgili adımı inceleyin. Test verisini, bağımlılık kurulumunu ve dağıtım hedefini kontrol ederek sorunun kaynağını bulun. Düzelttiğiniz adımı yeniden çalıştırın ve sonucun sonraki aşamaya geçişi engellemediğini doğrulayın.

Canlıya çıkan uygulamanın çalışma durumunu da izleme sürecine katın. Dağıtımın tamamlanması, uygulamanın beklenen şekilde çalıştığını tek başına göstermez. Ekipler sürüm sonrası gözlemleri paylaşarak sonraki değişikliklerin kontrol ve dağıtım adımlarını iyileştirebilir.

Sık sorulan sorular

CI pipeline'ı her kod gönderiminde çalışmak zorunda mı?
Hayır. Pipeline'ı kod gönderimi, pull request açılması veya belirli bir dalda yapılan değişiklik gibi seçtiğiniz olaylarla başlatabilirsiniz. Birleştirme öncesi kontrol istiyorsanız pull request tetikleyicisi tanımlayın. Canlı yayın adımlarını ise yalnızca yayın akışının amaçlanan koşullarında çalışacak şekilde ayırın.
CI/CD pipeline'ında parola ve API anahtarları nereye konur?
Parolaları ve API anahtarlarını kod deposuna veya pipeline tanımına düz metin olarak yazmayın. CI/CD aracınızın gizli değer yönetimini kullanın. Test ve canlı ortam için ayrı değerler tanımlayın. Her adıma yalnızca ihtiyaç duyduğu erişimi verin ve yetkileri ekip değişikliklerinde gözden geçirin.
CI/CD ile veritabanı değişiklikleri nasıl yayınlanır?
Veritabanı şema değişikliklerini sürümlenmiş migration dosyalarıyla yönetin ve önce test ortamında çalıştırın. Pipeline'da uygulama kodu ile migration adımlarının sırasını belirleyin. Canlıya geçişten önce yeni şemanın mevcut uygulama sürümüyle uyumunu test edin; yedekleme ve geri dönüş adımlarını da planlayın.

Kaynaklar

  1. What is DevOps? - DevOps Models Explained - Amazon Web Services (AWS)
  2. Continuous integration - GitHub Docs
  3. Continuous delivery and continuous integration - AWS CodePipeline
  4. DevOps capabilities  |  Google Cloud Documentation