CI/CD nedir? Tipik bir backend CI/CD pipeline'ının aşamaları nelerdir?
Cevap
- Continuous Integration (CI): her commit/PR'da kodun otomatik olarak derlenmesi ve test edilmesi. Amaç hataları erken yakalamak, ana dalı her zaman çalışır tutmak.
- Continuous Delivery: her değişiklik production'a çıkmaya hazır bir artefakt üretir; yayın tek tıkla (onaylı) yapılır.
- Continuous Deployment: testleri geçen her değişiklik insan onayı olmadan otomatik production'a çıkar.
Tipik pipeline
- Checkout + bağımlılık kurulumu (cache ile hızlandırılır)
- Lint ve statik analiz (ESLint, ruff, tip kontrolü)
- Unit testler
- Integration testler (gerçek PostgreSQL/Redis container'ları ile)
- Güvenlik taramaları (bağımlılık açıkları, secret taraması)
- Docker image build ve commit SHA ile etiketleyip registry'ye push
- Staging'e deploy + veritabanı migration'ları + smoke test
- Production'a deploy (onaylı veya otomatik)
- Deploy sonrası izleme ve gerekirse geri alma (rollback)
# .github/workflows/ci.yml (GitHub Actions)
name: ci
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:16
env: { POSTGRES_PASSWORD: test }
ports: ["5432:5432"]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 20, cache: npm }
- run: npm ci
- run: npm run lint
- run: npm testDeployment stratejileri
| Strateji | Nasıl çalışır | Not |
|---|---|---|
| Rolling | Instance'lar tek tek yenilenir | Varsayılan, ek kaynak az |
| Blue-green | Yeni ortam hazırlanır, trafik bir anda geçirilir | Anında rollback, iki kat kaynak |
| Canary | Trafiğin küçük yüzdesi yeni sürüme yönlendirilir | Riski azaltır, iyi metrik gerektirir |
Veritabanı migration'ları geriye uyumlu yazılmalıdır (expand/contract): önce yeni sütunu ekle, kodu güncelle, eski sütunu sonraki sürümde kaldır. Böylece rolling deploy sırasında eski ve yeni kod aynı şemayla çalışabilir.
İlgili Docker & DevOps soruları
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.