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
| Kavram | Aciklama | Hedef |
|---|---|---|
| CI (Continuous Integration) | Kod degisikliklerinin surekli olarak birlestirilmesi ve test edilmesi | Hatalari erken yakala |
| CD (Continuous Delivery) | Test edilen kodun uretim ortamina dagitima hazir tutulmasi | Her an dagitima hazir ol |
| CD (Continuous Deployment) | Testleri gecen kodun otomatik olarak uretim ortamina dagitilmasi | Manuel 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 buildGelismis 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 testJob 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 Turu | Arac Ornekleri | CI Asamasi | Sure |
|---|---|---|---|
| Unit Test | Jest, Vitest | Her commit | Saniyeler |
| Integration Test | Testing Library, Supertest | Her commit | Dakikalar |
| E2E Test | Playwright, Cypress | PR merge | 5-15 dakika |
| Performance Test | Lighthouse CI, k6 | Deployment oncesi | Dakikalar |
Deployment Stratejileri
Deployment Yontemleri Karsilastirmasi
| Strateji | Risk | Geri Donus | Aciklama |
|---|---|---|---|
| Direct Deploy | Yuksek | Yavas | Direkt uretim ortamina dagitim |
| Blue-Green | Dusuk | Aninda | Iki esit ortam arasinda gecis |
| Canary | Dusuk | Hizli | Kucuk kullanici grubuna dagitim |
| Rolling | Orta | Orta | Kademeli 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
- Repository ayarlarinda Settings > Secrets and variables > Actions bolumune gidin
- New repository secret ile yeni bir secret ekleyin
- Workflow icinde
${{ secrets.SECRET_NAME }}seklinde kullanin - 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.