CI/CD Pipeline Kurulumu: Otomatik Test ve Canlıya Alma Rehberi
Modern web projelerinde manuel dağıtım hatalarını sıfırlayan, test ve canlıya alma süreçlerini otomatikleştiren CI/CD pipeline kurulum rehberi.
Sistem Yöneticisi
Kıdemli Yazılım Mimarı
Modern Web Geliştirmede CI/CD Neden Zorunlu?
Manuel FTP yüklemeleri ve sunucuda doğrudan kod düzenleme pratikleri geride kaldı. Modern web standartlarında kod kalitesi, hız ve kararlılık esastır. Bir dijital ajans veya yazılım ekibi için CI/CD (Continuous Integration / Continuous Deployment) süreçleri; insan hatasını ortadan kaldırır, testleri standartlaştırır ve deployment süresini dakikalara indirir.
Temel Kavramlar
- Continuous Integration (CI): Geliştiricilerin kod değişikliklerini ana dala (main branch) sık aralıklarla entegre etmesi, her entegrasyonda otomatik test ve derleme (build) çalıştırılmasıdır.
- Continuous Delivery (CD): Kodun testleri geçtikten sonra her an canlı ortama çıkabilecek şekilde otomatik olarak paketlenmesidir.
- Continuous Deployment (CD): Testleri geçen kodun insan müdahalesi olmadan doğrudan canlı sunucuya aktarılmasıdır.
Adım Adım GitHub Actions ile Pipeline Kurulumu
Adım 1: Proje Dizininde İş Akışı Tanımlama
Proje kök dizininde .github/workflows/deploy.yml dosyası oluşturun:
name: CI/CD Pipeline
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
test-and-build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Node.js Kurulumu
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
- name: Bağımlılıkları Yükle
run: npm ci
- name: Linter Kontrolü
run: npm run lint
- name: Testleri Çalıştır
run: npm test
- name: Build Al
run: npm run buildAdım 2: Canlıya Alma (Deploy) Adımını Ekleme
SSH ile sunucuya bağlanıp güncel kodu çeken veya Docker image basan deployment bloğunu iş akışına bağlayın:
deploy:
needs: test-and-build
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
runs-on: ubuntu-latest
steps:
- name: SSH ile Canlıya Al
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_SSH_KEY }}
script: |
cd /var/www/app
git pull origin main
npm ci --production
pm2 reload appSektörel Trendler ve En İyi Pratikler
- Secrets Yönetimi: API anahtarlarını, SSH keyleri kesinlikle koda gömmeyin. GitHub Secrets veya Vault kullanın.
- Küçük ve Sık Commitler: Çatışmaları (merge conflicts) önlemek için günde birden fazla entegrasyon yapın.
- Zero-Downtime Deployment: Canlı ortamda kesintiyi önlemek için Blue/Green veya Rolling deployment stratejileri tercih edin.
İpucu: Pipeline çalışma süresi uzadıkça geliştirici verimi düşer. Bağımlılıkları önbelleğe (cache) alarak pipeline süresini %60 oranında kısaltabilirsiniz.