← Blog
Web Gelistirme9 dk okumaMegis

CI/CD Pipeline Rehberi: Surekli Entegrasyon ve Dagitim

CI/CD pipeline'lari kurarak kod degisikliklerinizi otomatik test ve dagitim surecleriyle canliya alin.

CI/CD Pipeline Rehberi: GitHub Actions, Workflow Tasarimi ve Deployment Otomasyonu

Surekli Entegrasyon (CI) ve Surekli Dagitim (CD), modern yazilim gelistirme sureclerinin temel taslarindan biridir. CI/CD pipeline'lari, kod degisikliklerinin otomatik olarak test edilmesini, derlenmesini ve uretim ortamina dagitilmasini saglar. Bu rehberde, GitHub Actions ile CI/CD pipeline olusturmayi, test otomasyonunu, deployment stratejilerini ve secrets yonetimini adim adim inceliyoruz.

CI/CD Nedir?

CI/CD, yazilim gelistirme surecindeki tekrarlayan gorevleri otomatize eden bir metodoloji ve arac setidir. Amaci, hatalari erken tespit etmek, gelistirme hizini artirmak ve uretim ortamina guvenli bir sekilde kod dagitmaktir.

CI ve CD Arasindaki Fark

KavramAciklamaHedef
CI (Continuous Integration)Kod degisikliklerinin surekli olarak birlestirilmesi ve test edilmesiHatalari erken yakala
CD (Continuous Delivery)Test edilen kodun uretim ortamina dagitima hazir tutulmasiHer an dagitima hazir ol
CD (Continuous Deployment)Testleri gecen kodun otomatik olarak uretim ortamina dagitilmasiManuel mudahale olmadan dagit

GitHub Actions Temelleri

GitHub Actions, GitHub'un dahili CI/CD platformudur. YAML tabanli workflow dosyalariyla pipeline'larinizi tanimlarsiniz. Her workflow bir veya daha fazla job, her job bir veya daha fazla step icerir.

Temel Kavramlar

  • Workflow: Pipeline'in tam tanimi, .github/workflows/ altinda YAML dosyasi olarak saklanir
  • Event: Workflow'u tetikleyen olay (push, pull_request, schedule vb.)
  • Job: Ayni runner uzerinde calisan adimlar grubu
  • Step: Tek bir komut veya action
  • Action: Tekrar kullanilabilir gorev birimi
  • Runner: Workflow'un calistigi sanal makine

Temel Workflow Ornegi

name: CI Pipeline
on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    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 run test
      - run: npm run build

Gelismis Workflow Tasarimi

Matrix Strategy ile Coklu Ortam Testi

jobs:
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest]
        node-version: [18, 20, 22]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm ci
      - run: npm test

Job Bagimliliklari

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm run lint

  test:
    needs: lint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm test

  deploy:
    needs: [lint, test]
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm run build
      - run: npx vercel --prod --token=${{ secrets.VERCEL_TOKEN }}

Test Otomasyonu

CI pipeline'inin en kritik bileseni test otomasyonudur. Farkli test turleri farkli asamalarda calistirilmalidir.

Test Piramidi ve CI Asamalari

Test TuruArac OrnekleriCI AsamasiSure
Unit TestJest, VitestHer commitSaniyeler
Integration TestTesting Library, SupertestHer commitDakikalar
E2E TestPlaywright, CypressPR merge5-15 dakika
Performance TestLighthouse CI, k6Deployment oncesiDakikalar

Deployment Stratejileri

Deployment Yontemleri Karsilastirmasi

StratejiRiskGeri DonusAciklama
Direct DeployYuksekYavasDirekt uretim ortamina dagitim
Blue-GreenDusukAnindaIki esit ortam arasinda gecis
CanaryDusukHizliKucuk kullanici grubuna dagitim
RollingOrtaOrtaKademeli sunucu guncelleme

Vercel Deployment Ornegi

name: Deploy to Vercel
on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
      - run: npm ci
      - run: npm run build
      - uses: amondnet/vercel-action@v25
        with:
          vercel-token: ${{ secrets.VERCEL_TOKEN }}
          vercel-org-id: ${{ secrets.ORG_ID }}
          vercel-project-id: ${{ secrets.PROJECT_ID }}
          vercel-args: '--prod'

Secrets Yonetimi

CI/CD pipeline'larinda API anahtarlari, veritabani sifreleri ve deployment token'lari gibi hassas bilgilerin guvenli yonetimi kritik oneme sahiptir.

GitHub Secrets Kullanimi

  1. Repository ayarlarinda Settings > Secrets and variables > Actions bolumune gidin
  2. New repository secret ile yeni bir secret ekleyin
  3. Workflow icinde ${{ secrets.SECRET_NAME }} seklinde kullanin
  4. Environment secret'lari ile ortam bazli ayrim yapabilirsiniz

Secrets Guvenlik En Iyi Uygulamalari

  • Secret'lari asla log'lara yazdirmayin
  • Minimum yetki ilkesini uygulayin (en az gerekli izin)
  • Secret'lari duzenli olarak rotate edin
  • Environment protection rules ile production secret'larini koruyun
  • OIDC token kullanarak uzun omurlu secret'lardan kacinin

CI/CD En Iyi Uygulamalari

  • Hizli pipeline: CI pipeline'i 10 dakikanin altinda tamamlanmalidir
  • Paralel calistirma: Bagimsiz job'lari paralel calistirarak sure kazanin
  • Cache kullanin: Bagimliliklari onbellekleyerek tekrarlayan indirmeleri onleyin
  • Fail fast: En hizli testleri once calistirarak erken geri bildirim alin
  • Branch protection: Main branch'e dogrudan push'u engelleyin, PR zorunlu kilin
  • Status check: Merge icin CI'in basarili gecmesini zorunlu kilin

Sonuc

CI/CD pipeline'lari, yazilim gelistirme surecini otomatize ederek hiz, guvenilirlik ve kaliteyi arttirir. GitHub Actions ile basit bir workflow'dan baslayarak, projenizin ihtiyaclarina gore pipeline'inizi gelismis test, deployment ve guvenlik adimlarıyla zenginlestirebilirsiniz. Dogru secrets yonetimi ve deployment stratejisi ile uretim ortaminiza guvenle kod dagitabilirsiniz.

#ci/cd#pipeline#surekli entegrasyon#devops