GitHub Actions ile CI/CD Süreçleri: Otomatik Test ve Dağıtım Görseli

GitHub Actions ile CI/CD Süreçleri: Otomatik Test ve Dağıtım

01.11.2026 | 13

Modern Yazılım Geliştirmede CI/CD ve Otomasyonun Yeri

Yazılım dünyasında hız her şeydir ancak hızın güvenlikle desteklenmediği durumlarda teknik borç ve üretim hataları kaçınılmaz hale gelir. Manuel test süreçleri ve elle yapılan sunucu deploy işlemleri, insan hatasına açık olmasının yanı sıra ekiplerin enerjiini asıl değer üreten noktalardan uzaklaştırır. Continuous Integration (CI) ve Continuous Deployment (CD) süreçleri, bu noktada yazılım mimarisinin omurgasını oluşturur.

GitHub ekosistemine entegre gelen GitHub Actions, harici bir CI/CD servisine ihtiyaç duymadan, repolarınız üzerinden doğrudan iş akışları (workflows) çalıştırmanıza olanak tanır. Bu yazıda, üretim ortamına hatasız kod göndermenizi sağlayacak sağlam bir pipeline kurulumunu ele alacağız.

GitHub Actions ile İlk İş Akışını (Workflow) Tasarlamak

GitHub Actions; event'ler (push, pull_request vb.) tetiklendiğinde çalışan, YAML tabanlı yapılandırma dosyalarıdır. Projenizin kök dizininde oluşturacağınız .github/workflows/ klasörü altında bu yapılandırmaları saklarsınız.

Aşağıda Node.js tabanlı bir uygulama için yazılmış, her main dalına yapılan push işleminde otomatik test koşturan ve başarılı olursa build alan örnek bir iş akışı bulunmaktadır:

name: Node.js CI/CD Pipeline

on:
  push:
    branches: [ 'main' ]
  pull_request:
    branches: [ 'main' ]

jobs:
  build-and-test:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [18.x, 20.x]

    steps:
    - name: Kodu Klonla (Checkout)
      uses: actions/checkout@v4

    - name: Node.js Ortamını Kur (${{ matrix.node-version }})
      uses: actions/setup-node@v4
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'

    - name: Bağımlılıkları Yükle
      run: npm ci

    - name: Unit Testleri Çalıştır
      run: npm test

    - name: Projeyi Derle (Build)
      run: npm run build
GitHub Actions pipeline mimarisi ve otomasyon adımları şeması Görseli
GitHub Actions pipeline mimarisi ve otomasyon adımları şeması

Üretim Ortamına Otomatik Dağıtım (Deployment)

Test aşaması başarıyla geçildikten sonra sıradaki adım, uygulamanın canlı sunucuya veya bulut ortamına (AWS, Docker Hub, Vercel vb.) otomatik olarak gönderilmesidir. CD aşamasında güvenlik en kritik unsurdur. Şifreler ve API anahtarları asla kod tabanında saklanmamalıdır.

Mimari İpucu: Hassas verilerinizi her zaman GitHub repository ayarlarındaki Settings > Secrets and variables > Actions bölümünden Secret olarak tanımlayın ve iş akışında ${{ secrets.PROD_API_KEY }} şeklinde çağırın.

Aşağıdaki adım, SSH kullanarak uzak sunucuya bağlanıp güncellemeleri çeken ve servisi yeniden başlatan bir deploy adımı örneğidir:

    - name: Sunucuya SSH ile Bağlan ve Deploy Et
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.SSH_HOST }}
        username: ${{ secrets.SSH_USER }}
        key: ${{ secrets.SSH_PRIVATE_KEY }}
        script: |
          cd /var/www/myapp
          git pull origin main
          npm ci
          pm2 restart myapp

Pipeline Optimizasyonu İçin En İyi Pratikler

Büyük projelerde CI/CD süreleri maliyet ve zaman kaybına yol açabilir. Verimliliği artırmak için şu stratejileri uygulayabilirsiniz:

  • Önbellekleme (Caching): Node_modules veya Maven/Gradle bağımlılıklarını önbelleğe alarak her build işleminde yeniden indirme maliyetinden kurtulun.
  • Paralelleştirme: Testlerinizi matris stratejileriyle bölerek farklı sanal makinelerde eş zamanlı çalıştırın.
  • Koşullu Adımlar (Conditional Steps): Yalnızca ilgili dosyalarda değişiklik olduğunda (örneğin sadece package.json değiştiğinde bağımlılık yükleme) adımları tetikleyin.

Doğru kurgulanmış bir GitHub Actions pipeline'ı, geliştirici güvenini artırır ve ekiplerin hızlı inovasyon yapmasının önündeki engelleri ortadan kaldırır. Kodunuzu repoya gönderdiğiniz anda arkada çalışan güçlü bir otomasyon mekanizması olması, profesyonel yazılım geliştirmenin temel taşıdır.

| |