🚀 CI/CD — Uçtan Uca Rehber

Doğru pipeline tasarımı, otomatik test ve güvenlik taramaları, sağlam artifact yönetimi ve risk azaltan Blue-Green / Canary dağıtımlar. Hem projede uygula hem de mülakatta net anlat.

🔎 Genel Bakış

  • CI: Her commit’te otomatik build + test + kalite kontrolleri.
  • CD: Onaylı/otomatik deployBlue-Green/Canary ile risksiz geçiş.
  • Güvenlik: SCA (bağımlılık), SAST (kod), DAST (koşan uygulama), Container tarama, SBOM.
  • İzlenebilirlik: Versiyon/etiket, SBOM, imza (cosign), ortamdan ortama promotion.

🏗️ Pipeline Tasarımı

Aşama Akışı

  • pre-commit (lokal): lint/format/hızlı test
  • CI: build → unit/slice → coverage & mutation → SCA/SAST → paketleme → image build → image scan → SBOM
  • CD: deploy dev → integration/contract/e2e → onay → stagingprod (blue-green/canary)

Matris & Paralellik

  • JDK 17/21 matrisi, çoklu OS/DB sürümleri için matrix build.
  • Cache (Maven/NPM/Docker layer) ile süre kısaltma.
# GitHub Actions örnek pipeline özeti
name: ci
on: [push, pull_request]
jobs:
  build-test:
    runs-on: ubuntu-latest
    strategy: { matrix: { java: [17, 21] } }
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with: { distribution: temurin, java-version: ${{ matrix.java }} }
      - name: Cache maven
        uses: actions/cache@v4
        with:
          path: ~/.m2
          key: m2-${{ hashFiles('**/pom.xml') }}
      - name: Build & Test
        run: mvn -B -DskipITs=false verify

🧱 Build/Test/Scan Aşamaları

Build

  • Maven/Gradle: reproducible build, -DskipTests kullanımı yalnızca hızlı prototipte.
  • Docker image: multi-stage build, küçük base (alpine, distroless).
# Multi-stage Dockerfile (Spring Boot)
FROM maven:3.9-eclipse-temurin-21 as build
WORKDIR /app
COPY pom.xml .
RUN mvn -B -q -e -DskipTests dependency:go-offline
COPY . .
RUN mvn -B -DskipTests package

FROM eclipse-temurin:21-jre-alpine
WORKDIR /opt/app
COPY --from=build /app/target/app.jar app.jar
ENTRYPOINT ["java","-jar","app.jar"]

Test

  • Unit/Slice/Integration → Testcontainers ile gerçek DB/Queue.
  • Contract (Pact/Spring Cloud Contract), e2e smoke.

Scan

  • SCA: Dependency tarama (OWASP Dependency-Check, Snyk).
  • SAST: Kod analiz (SonarQube/SpotBugs).
  • Container: Trivy/Grype; yüksek CVE → gate.
  • SBOM: CycloneDX/Syft → artifact ile birlikte yayınla.
# Sonar + Trivy örneği (Actions)
- name: Sonar Scan
  run: mvn -B sonar:sonar -Dsonar.host.url=$SONAR_URL -Dsonar.login=$SONAR_TOKEN
- name: Build image
  run: docker build -t registry/app:${GITHUB_SHA} .
- name: Trivy
  uses: aquasecurity/trivy-action@0.20.0
  with:
    image-ref: 'registry/app:${{ github.sha }}'
    format: 'table'
    exit-code: '1'   # kritik bulguda job'ı kır
    vuln-type: 'os,library'

📦 Artifact Yönetimi

  • Maven (Nexus/Artifactory) → groupId:artifactId:version.
  • Container registry: registry/app:1.4.0 + immutability.
  • Build metadata: git SHA, build time, SBOM, imza.
  • Promotion: dev → staging → prod aynı image/artifact ID ile.
# Artifact publish (Maven)
- name: Publish
  run: mvn -B deploy -DskipTests -DaltDeploymentRepository=repo::default::${NEXUS_URL}

🏷️ Versiyonlama & Release

  • SemVer: MAJOR.MINOR.PATCH.
  • Git Tag tabanlı sürüm; 1.5.2 etiketi pipeline’ı tetikler.
  • Release notları otomatik (Conventional Commits + changelog).
# Tag ile sürümleme
on:
  push:
    tags: ['v*.*.*']

🚢 Deploy Otomasyonu

  • IaC: Helm/Manifest; ortam değişkenleri → values.yaml.
  • Health checks: liveness/readiness; graceful shutdown.
  • DB migration: Flyway/Liquibase (aşağıda).
# GitHub Actions ile K8s deploy (kubectl/helm)
- uses: azure/setup-kubectl@v4
- uses: azure/setup-helm@v4
- name: Helm upgrade
  run: |
    helm upgrade --install app charts/app \
      --namespace prod --create-namespace \
      --set image.tag=${{ github.sha }}

🟦 Blue-Green & 🟨 Canary Stratejileri

StratejiÖzetArtıEksi
Blue-Green İki ortam (blue/green). Trafik anlık yeni ortama aktarılır. Hızlı rollback, sıfıra yakın kesinti Çift kaynak maliyeti, state senkronu
Canary Trafiğin küçük yüzdesi yeni versiyona, kademeli artırılır. Risk azaltır, gerçek metriklerle ilerleme Rota/yönlendirme karmaşıklığı

Ingress/Service Mesh ile Canary

# Istio VirtualService canary yüzdeleri
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
spec:
  hosts: ["app.example.com"]
  http:
    - route:
      - destination: { host: app, subset: v1 }
        weight: 90
      - destination: { host: app, subset: v2 }
        weight: 10
İzleme: p95 latency, error rate, iş metrikleri (sipariş/s) canary sırasında otomatik gate olsun.

🗃️ DB Migrasyonları (Flyway/Liquibase)

  • İleriye uyumlu şema değişiklikleri: önce yeni kolon ekle → kodu yeni kolonu kullanacak şekilde yayınla → eskiyi kaldır.
  • Backfill işlemlerini idempotent batch job olarak ayır.
  • Transactional DDL desteklemeyen DB’lerde güvenli sıralama.
# Spring Boot Flyway
spring.flyway.enabled=true
spring.flyway.locations=classpath:db/migration
-- V1__create_orders.sql
CREATE TABLE orders (id BIGINT PRIMARY KEY, status VARCHAR(20), created_at TIMESTAMP);

☸️ Kubernetes & Helm

# deployment.yaml (özet)
apiVersion: apps/v1
kind: Deployment
spec:
  replicas: 3
  strategy: { type: RollingUpdate, rollingUpdate: { maxUnavailable: 0, maxSurge: 1 } }
  template:
    spec:
      containers:
      - name: app
        image: registry/app:1.4.0
        readinessProbe: { httpGet: { path: /actuator/health, port: 8080 }, initialDelaySeconds: 10 }
        livenessProbe:  { httpGet: { path: /actuator/health, port: 8080 }, initialDelaySeconds: 20 }
        resources: { requests: { cpu: "200m", memory: "256Mi" }, limits: { cpu: "1", memory: "512Mi" } }

Helm values.yaml ile ortam farklarını yönetin; secrets için Vault/External Secrets Operator kullanın.

🧭 GitOps (Argo CD)

  • İstenen durum (manifests/Helm) Git’te; Argo CD sürekli senkronize eder.
  • PR-tabanlı değişim, audit ve rollbacks basit.
# ArgoCD Application (özet)
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
  source: { repoURL: 'https://git/repo', path: 'charts/app', targetRevision: main }
  destination: { server: 'https://kubernetes.default.svc', namespace: prod }
  syncPolicy: { automated: { prune: true, selfHeal: true } }

🛡️ Supply Chain Güvenliği

  • SBOM üret ve yayınla (CycloneDX/Syft).
  • Image imzalama: cosign + politika (Only signed images).
  • SLSA/Provenance: build kanıtı, tam izlenebilirlik.
  • Policy as Code: OPA/Conftest ile no-latest tag, root kullanıcı yasağı, minimum base image vb.
cosign sign --key cosign.key registry/app:1.4.0
cosign verify registry/app:1.4.0

✅ Quality Gates & Onay Adımları

  • Sonar Quality Gate, Trivy kritik CVE=0, test başarısı ≥ %100, coverage ≥ %X, mutation ≥ %Y.
  • Staging→Prod için manuel onay + değişiklik seti & risk notu.
  • Canary metrikleri eşik altındaysa otomatik ilerleme.

⚡ Hız & Stabilite

  • Cache (Maven/NPM, Docker layer), –offline yaklaşımları.
  • Paralel job, matrix; flaky test quarantine + tekrar deneme (retries).
  • Artefact yeniden kullanımı (promotion), her aşamada sıfırdan build etme.
# GitLab CI: Retry/Cache (özet)
build:
  script: mvn -B -DskipITs=false verify
  cache: { key: m2, paths: [ .m2/repository ] }
  retry: 2

↩️ Rollback Stratejileri

  • Blue-Green: trafik geri çevir → anlık rollback.
  • Canary: canary ağırlığını eski versiyona geri al.
  • DB: ileri-geri uyumlu değişiklikler, veri geri alma planı, feature flag ile davranışı kapat.

❓ Mülakat Soruları & Kısa Yanıtlar

1) CI ve CD farkı?

CI: otomatik build/test; CD: onaylı/otomatik dağıtım ve ortamdan ortama geçiş.

2) Blue-Green vs Canary?

Blue-Green anlık geçiş/rollback; Canary kademeli trafik ve metrik-güdümlü karar.

3) SBOM neden önemli?

Bağımlılıkların tam envanteri → CVE izleme, uyumluluk ve tedarik zinciri güvenliği.

4) Production’a giden artefact aynı mı?

Evet; promotion ile tek artefact/tek image, ortamda yalnızca konfigürasyon değişir.

5) Feature flags nasıl yardım eder?

Riskli özellikleri runtime’da aç/kapat; rollback gereksinimini azaltır.

📝 CI/CD Check-list

  • ✅ Unit/Integration/Contract testleri, coverage & mutation metrikleri
  • ✅ SCA/SAST/Container Scan, Quality Gate kuralları
  • ✅ SBOM üretimi ve yayın
  • ✅ Immutable artefact & registry, tag + digest
  • ✅ Helm/Manifest, readiness/liveness, kaynak limitleri
  • ✅ Blue-Green/Canary planı + izleme (p95, error rate, iş metrik)
  • ✅ DB migration stratejisi (ileri/geri uyumlu)
  • ✅ İmza (cosign), politika (OPA), audit
  • ✅ Cache/paralelism ile hızlı pipeline; flaky yönetimi
  • ✅ Rollback prosedürü ve iletişim planı