CI/CD Nedir? Sürekli Entegrasyon ve Sürekli Dağıtım Rehberi
"Kodu FTP ile sunucuya yükle" devri kapandı. Modern yazılım geliştirmede CI/CD, kodun üretim ortamına güvenli ve otomatik şekilde ulaştırılmasını sağlar.
Temel Kavramlar
Continuous Integration (CI) — Sürekli Entegrasyon
Geliştiricilerin kodlarını sık sık (günde birden fazla) ana dala birleştirmesi ve her birleştirmede otomatik testlerin çalıştırılması:
Developer Push → Build → Lint → Unit Test → Integration Test
↓
✅ Merge / ❌ Reject
Continuous Delivery (CD) — Sürekli Teslimat
CI'dan geçen kodun her an üretime hazır durumda tutulması. Deploy düğmesiyle tek tıkla üretime çıkabilme.
Continuous Deployment — Sürekli Dağıtım
Testten geçen her değişikliğin otomatik olarak üretime dağıtılması. İnsan müdahalesi yok.
CI → CD (teslimat) → Manuel onay → Deploy
CI → CD (dağıtım) → Otomatik Deploy ← Fark bu!
Neden CI/CD?
| Metrik | CI/CD Öncesi | CI/CD Sonrası | |--------|-------------|--------------| | Deploy sıklığı | Ayda 1 | Günde N | | Bug tespit süresi | Günler | Dakikalar | | Deploy başarı oranı | %60-70 | %95+ | | Geri alma süresi | Saatler | Saniyeler | | Manuel test eforu | Yüksek | Minimal |
CI/CD Pipeline Tasarımı
İdeal bir pipeline aşamaları:
1. Source → Kod değişikliği algıla
2. Build → Projeyi derle / container image oluştur
3. Test → Unit + Integration + E2E test
4. Security → SAST/DAST tarama
5. Staging → Test ortamına dağıt
6. Approval → Manuel onay (opsiyonel)
7. Production → Üretime dağıt
8. Monitor → Smoke test + izleme
GitHub Actions Örneği
name: CI/CD Pipeline
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm run lint
- run: npm test
deploy:
needs: test
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: google-github-actions/deploy-cloudrun@v2
with:
service: bilgeone
region: europe-west1
CI/CD Araçları Karşılaştırması
| Araç | Tür | Avantaj | Dezavantaj | |------|-----|---------|-----------| | GitHub Actions | Cloud | GitHub entegrasyonu, ücretsiz katman | GitHub'a bağımlı | | GitLab CI | Cloud/Self-hosted | Built-in, kapsamlı | Karmaşık konfigürasyon | | Jenkins | Self-hosted | Esnek, plugin ekosistemi | Bakım yükü | | CircleCI | Cloud | Hızlı, basit | Maliyet | | Azure DevOps | Cloud | Enterprise, kapsamlı | Microsoft ekosistemi |
CI/CD Best Practices
1. Her Şeyi Otomatikleştir
Lint, test, build, deploy — manuel adım olmamalı.
2. Hızlı Geri Bildirim
Pipeline 10 dakikayı geçmemeli. Uzarsa paralel çalıştırma ve caching kullanın.
3. Trunk-Based Development
Uzun yaşayan branch'lerden kaçının. Küçük, sık merge yapın.
4. Feature Flags
Yarım kalan özellikleri flag arkasına koyun. Deploy ≠ Release.
5. Rollback Stratejisi
Her zaman bir önceki versiyona dönebilecek mekanizma olmalı.
BilgeOne CI/CD Pipeline'ı
BilgeOne projemizde kullandığımız pipeline:
- PR açılır → Otomatik lint + test
- Test geçer → Preview environment deploy
- PR merge → Staging deploy + smoke test
- Manuel onay → Production deploy (Cloud Run)
- Deploy → Health check + Slack bildirimi
Sonuç
CI/CD, modern yazılım geliştirmenin olmazsa olmazıdır. Hata riskini azaltır, deploy hızını artırır ve ekip verimliliğini katlar. Başlangıçta yatırım gerektirir, ancak ilk haftadan itibaren geri dönüş sağlar.
CI/CD pipeline tasarımını ve DevOps pratiklerini LabLudus platformunda interaktif görevlerle öğrenin.