CI/CD nedir? Yazılım ekibinize ne kazandırır?
CI/CD, modern yazılım geliştirmenin temel pratiği. Bu yazıda CI/CD'nin ne olduğunu, nasıl çalıştığını, ekibe ne kazandırdığını ve nasıl kurulacağını anlatıyoruz. Yazılım ekibi yöneticileri, CTO'lar ve teknik karar vericiler için pratik rehber.
Özet
CI/CD (Continuous Integration / Continuous Deployment), her kod değişikliğinin otomatik test edilip güvenle production'a alınması pratiğidir. Doğru kurulduğunda yayın sıklığını 24 kata kadar artırır, production kazalarını azaltır ve geri dönüş süresini dakikalara düşürür. GitHub Actions, GitLab CI gibi modern araçlarla kurulumu 1-4 hafta sürer.
CI/CD nedir?
CI/CD iki kavramın birleşimi:
CI (Continuous Integration - Sürekli Entegrasyon): Her geliştirici, kod değişikliklerini gün içinde sıkça ana dala (main/master) entegre eder. Her entegrasyonda otomatik build ve test çalışır. "Benim makinemde çalışıyor" sorunu kaybolur; entegrasyon sorunları erken yakalanır.
CD (Continuous Deployment/Delivery - Sürekli Dağıtım): CI doğrulamasından geçen her değişiklik otomatik olarak (deployment) veya onayla (delivery) production'a alınır. Deployment manuel bir ritüel değil, otomatik bir süreçtir.
Pratikte CI/CD pipeline'ı şu aşamalardan oluşur:
- Lint ve type check — hızlı geri bildirim (1 dakika)
- Unit testler — paralel çalışır (5 dakika)
- Build — container image veya binary
- Security scan — bağımlılık açıkları, secret taraması
- Staging'e dağıtım — entegrasyon test ortamı
- E2E testler — tarayıcıda kullanıcı senaryoları
- Manuel onay (production için opsiyonel)
- Production dağıtımı — kademeli (canary veya blue-green)
- Post-deploy smoke test — sistem sağlıklı mı?
- Otomatik rollback — hata durumunda geri dönüş
Neden CI/CD gereklidir?
Geleneksel yaklaşımda (CI/CD yok) yazılım geliştirme şöyle çalışır: geliştiriciler haftalarca kod yazar, "release günü"nde her şey birleştirilir, manuel test edilir, sorun çıkarsa geri döner. Bu modelin sorunları:
- "Works on my machine": Geliştirici makinesinde çalışan kod, başka ortamda çalışmaz.
- Geç entegrasyon: Haftalar sonra birleştirilen kod, çok sayıda çakışma üretir.
- Uzun yayın döngüleri: Ayda bir yayın, her yayında yüksek risk.
- Manuel hatlar: İnsanlar deployment sırasında hata yapar.
- Geri dönüş zorluğu: Manuel deployment geri alınması zor.
CI/CD bu sorunları çözer. Her değişiklik küçük, testli, izole. Yayın sık ve risksiz. Geri dönüş saniyeler.
Ekibe kazandırdıkları
Araştırmalar (DORA metrics, Accelerate kitabı) CI/CD'nin ekibe kazandırdıklarını sayılarla gösteriyor:
- Yayın sıklığı: Günde birkaç kez (geleneksel ayda bir ile karşılaştırınca 24 kata kadar daha sık)
- Değişiklik başına Lead time: Saatler (geleneksel haftalar/aylar yerine)
- Değişiklik başına failure rate: %0-15 (geleneksel %15-50)
- MTTR (Mean Time To Recovery): Dakikalar (geleneksel saatler/günler)
Ama sayılardan da önemlisi kültürel etkiler:
- Daha az stresli yayın: Otomatik, testli, geri alınabilir — "cüce salı günü deployment" korkusu kaybolur.
- Daha hızlı öğrenme: Bir özellik gün içinde canlıda, kullanıcıdan feedback haftalar değil saatler sonra gelir.
- Daha az "gece vardiyası": Deployment iş saatlerinde, izlemeli.
- Daha kaliteli kod: Code review kültürü, test yazma alışkanlığı yerleşir.
- Yeni ekip üyelerinin adaptasyonu: Standardize süreç, yeni biri hızla uyum sağlar.
CI/CD araçları
Piyasada birçok CI/CD aracı var. Başlıcaları:
GitHub Actions
GitHub'la tümleşik, YAML tabanlı pipeline tanımlama. Open-source repolar için ücretsiz, private repolar için aylık ücretsiz kota yeterli. Ekosistem geniş (marketplace'te binlerce hazır action). Self-hosted runner desteği var. Önerilen başlangıç — eğer GitHub kullanıyorsanız, en doğru seçim.
Örnek basit bir GitHub Actions workflow:
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '22'
- run: npm ci
- run: npm run lint
- run: npm run typecheck
- run: npm test
- run: npm run build
GitLab CI
GitLab'la tümleşik. Self-hosted runner'larla çalışır. Kubernetes-native. Kurumsal kimlik doğrulama gereksinimleri için uygun. Eğer GitLab kullanıyorsanız doğal seçim.
Jenkins
Yılların eskisi, hâlâ yaygın. Çok esnek, plugin ekosistemi geniş. Ama bakımı zor, kompleks. Yeni projeler için önerilmez; eski kurumsal ortamlarda karşınıza çıkar.
CircleCI
Docker-native, hızlı. MacOS runner desteği iyi (iOS build için). Ücretsiz katmanı kısıtlı.
ArgoCD / Flux (GitOps)
Kubernetes için GitOps araçları. Cluster state'i Git'te tutulur, her değişiklik pull request'le, audit'le. Kubernetes ortamında ideal deployment aracı.
CI/CD nasıl kurulur?
Tipik bir kurulum süreci:
1. Build aşaması
Kaynak kodu derlenir/paketlenir. JavaScript/TypeScript için npm run build, Go için go build, container için docker build. Build çıktısı (artifact) cache'lenir, sonraki aşamalar bunu kullanır.
2. Test aşaması
Otomatik testler paralel çalışır:
- Unit testler: Tek tek fonksiyonlar/davranışlar. Hızlı, çok sayıda.
- Integration testler: Birimler arası etkileşim. Orta hız.
- Contract testler: API'ler arası sözleşmeler (Consumer-Driven Contract Testing).
- E2E testler: Gerçek tarayıcıda kullanıcı senaryoları (Playwright, Cypress). Yavaş ama güven veren.
İyi bir test piramidi: çok unit, az integration, çok az E2E.
3. Güvenlik (DevSecOps)
Modern pipeline'lar güvenliği her aşamada barındırır:
- SAST: Kaynak kod analizi (CodeQL, SonarQube, Semgrep)
- SCA: Bağımlılık açıkları (Dependabot, Trivy, Snyk)
- Secret scan: Kodda hardcoded secret (GitGuardian, Gitleaks)
- Container scan: Image açıkları (Trivy, Grype)
- DAST: Çalışan uygulama testi (OWASP ZAP, Burp)
Güvenlik açığı bulunursa pipeline durur; "fail fast" prensibi.
4. Deployment stratejileri
Production'a dağıtım stratejisi, riski minimize eder:
- Rolling deployment: Eski versiyonu yavaşça yenisiyle değiştirir.
- Blue-green: İki ortam (blue = eski, green = yeni). Trafik bir anda geçer; sorun olursa geri.
- Canary release: Yeni versiyon önce %1-5 trafik alır. Sorun yoksa oran artar.
- Feature flags: Kod production'da ama kapalı. Bayrak açılarak kademeli etkinleştirilir.
Kubernetes ortamında ArgoCD + canary rollout ideal kombinasyon.
5. Observability
Pipeline bittikten sonra gözlem devam eder:
- Metrics: Prometheus + Grafana (CPU, RAM, istek sayısı, hata oranı)
- Logs: Loki/ELK (yapısal log arama)
- Tracing: Jaeger/Tempo (istek akışını izleme)
- Error tracking: Sentry (hata gruplama, bildirim)
- Uptime: Synthetic check, dışarıdan sistem sağlığı
Bu veriler olmadan deployment başarılı mı başarısız mı bilemezsiniz.
6. Geri dönüş (rollback)
Sorun çıkarsa hızlıca geri dönülebilir olmalı:
- Otomatik rollback: Health check fail ise otomatik önceki versiyona.
- Manuel rollback: Butonla, saniyeler içinde.
- Database migration: Şema değişiklikleri geri alınabilir olmalı (expand-contract pattern).
Yaygın hatalar
- Pipeline çok yavaş: 30 dakikadan uzun pipeline geliştiriciyi engeller. Cache, paralelleştirme, incremental build ile optimize.
- Test yetersiz: %20 code coverage ile güvenle deploy edilemez. Önce testleri yazın.
- Flaky testler: Ara sıra fail olan testler güveni kırar. Hemen düzeltin.
- Manual gate çok: Her deployment için insan onayı akışı kırar. Otomasyonu artırın.
- Tek ortam: Dev/staging/prod ayrımı yok. Deployment'tan önce staging'de test şart.
- Secret yönetimi yok: Pipeline'da hardcoded şifreler. Vault, AWS Secrets Manager kullanın.
- Monitoring yok: Dağıttık, çalışıyor mu? Bilmiyoruz. Observability kurmadan deployment yapmayın.
Maliyet ve ROI
CI/CD aracının maliyeti düşük (GitHub Actions open-source için ücretsiz). Ana maliyet ilk kurulum için danışmanlık/iç emek — 1-4 hafta. Sonrasında operasyon maliyeti minimal.
ROI hızlı:
- Daha az production kazası = daha az maliyetli kesinti
- Daha hızlı yayın = daha hızlı kullanıcı feedback = daha iyi ürün
- Daha az manuel test = daha fazla geliştirici verimliliği
- Daha az "gece deployments" = daha az personel burnout
Çoğu ekip ilk 3 ay içinde pozitif ROI görür.
Sonuç
CI/CD, modern yazılım geliştirmenin temel pratiğidir. Doğru araç ve yaklaşımla kurulduğunda yayın sıklığı 24 kata kadar artar, production kazaları azalır, ekip verimliliği yükselir. GitHub Actions ile başlamak en kolay; Kubernetes ortamında ArgoCD ile GitOps ideali. Maliyeti düşük, ROI'si hızlı.
Eğer CI/CD henüz kurmadıysanız veya mevcut pipeline'ınız yavaş/güvensizse; Clouify olarak kurulum, denetim ve optimizasyon destek veriyoruz. Talep oluşturun, mevcut durumunuzu birlikte değerlendirelim.
İlgili hizmetlerimiz: CI/CD kurulumu, DevSecOps, Kubernetes danışmanlık.