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.

Bu yazıda neler var?
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şım | Başarılı kontrollerden sonra | Canlıya geçiş |
|---|---|---|
| Sürekli teslimat | Sürüm yayınlanmaya hazır olur | İnsan onayı veya manuel işlem gerekebilir |
| Sürekli dağıtım | Sürüm canlı ortama alınır | Ek 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.

- Kod değişikliğini ortak depoya gönderin.
- Derleme ve otomatik test kontrollerini çalıştırın.
- Başarılı sürümü test ortamına dağıtın.
- Test ortamındaki sonucu kontrol edin ve gerekiyorsa onay alın.
- 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.