CI/CD nedir? Continuous delivery ile continuous deployment arasındaki fark nedir? Tipik bir pipeline'da hangi adımlar olur?
Cevap
Continuous Integration (CI), geliştiricilerin değişikliklerini sık sık (en az günde bir kez) ana dala birleştirmesi ve her birleştirmede otomatik build ve testlerin çalışmasıdır. CD iki farklı anlama gelir:
- Continuous Delivery: her değişiklik otomatik olarak üretime çıkmaya hazır hâle getirilir; üretime alma bir insan onayıyla (tek tıkla) yapılır.
- Continuous Deployment: testleri geçen her değişiklik otomatik olarak üretime çıkar; manuel onay yoktur.
Tipik pipeline adımları
- Kod checkout, bağımlılık kurulumu (cache ile).
- Lint ve statik analiz (ESLint, SonarQube, tip kontrolü).
- Unit testler.
- Build ve artifact/Docker image oluşturma.
- Güvenlik taramaları (bağımlılık açıkları, secret taraması, image taraması).
- Integration testleri.
- Staging ortamına deploy, smoke/E2E testleri.
- Üretime deploy (otomatik veya onaylı), ardından izleme.
Örnek: GitHub Actions
name: ci
on:
pull_request:
push:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: "3.12"
cache: pip
- run: pip install -r requirements.txt
- run: ruff check .
- run: pytest --maxfail=1 -q
deploy:
needs: test
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
environment: production # onay kuralı burada tanımlanabilir
steps:
- run: echo "deploy..."Güvenli yayın teknikleri
- Feature flag: kod üretimde ama özellik kapalı; deploy ile release birbirinden ayrılır.
- Blue-green deployment: iki özdeş ortam, trafik tek seferde yenisine geçer, geri dönüş anlıktır.
- Canary release: yeni sürüm önce trafiğin küçük bir yüzdesine açılır, metrikler iyiyse genişletilir.
- Rolling update: instance'lar sırayla güncellenir (Kubernetes varsayılanı).
İyi pratikler
- Pipeline hızlı olmalı (CI için ideal olarak 10 dakikanın altı); yavaş pipeline sık entegrasyonu öldürür.
- Aynı artifact tüm ortamlarda kullanılmalı ("build once, deploy many").
- Kırmızı ana dal en yüksek öncelikle düzeltilmeli.
- DORA metrikleri ile ölçün: deploy sıklığı, lead time, change failure rate, hizmeti geri getirme süresi.
İlgili Yazılım Geliştirme Süreçleri soruları
- Testi olmayan büyük bir legacy kod tabanında değişiklik yapmanız gerekiyor. Nasıl ilerlersiniz?
- Semantic Versioning (SemVer) nedir? 2.4.1 sürümündeki her sayı neyi ifade eder?
- Teknik borç (technical debt) nedir? Ekipte teknik borcu nasıl yönetir ve iş tarafına nasıl anlatırsınız?
- TDD (Test-Driven Development) nedir? Red-Green-Refactor döngüsünü bir örnekle anlatın.
- Test piramidi nedir? Unit, integration ve end-to-end testler arasındaki farklar nelerdir?
- Code review'da nelere dikkat edersiniz? İyi bir pull request nasıl hazırlanır?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.