Taze Logo
Yazılım Geliştirme29 Mart 2026

GitHub Actions ile CI/CD: Kodunuzu Otomatik Olarak Test Edin, Derleyin ve Dağıtın

GitHub Actions ile CI/CD: Kodunuzu Otomatik Olarak Test Edin, Derleyin ve Dağıtın

Manuel dağıtımların ve 'benim makinemde çalışıyordu' bahanelerinin sonu geldi. Bu kapsamlı rehberde, GitHub Actions kullanarak projenizi nasıl otomatik olarak test edeceğinizi, derleyeceğinizi ve canlıya alacağınızı, sıfırdan bir CI/CD pipeline'ı oluşturarak öğrenin.

Giriş: 'Benim Makinemde Çalışıyordu' Efsanesinin Sonu

Yazılım geliştirme döngüsünün en can sıkıcı anlarından biri, günlerce uğraştığınız kodun takım arkadaşınızın makinesinde veya daha da kötüsü, sunucuda çalışmamasıdır. Farklı ortamlar, eksik bağımlılıklar ve manuel yapılan dağıtım hataları... İşte bu kaosun ortasında CI/CD (Sürekli Entegrasyon / Sürekli Dağıtım) bir kurtarıcı gibi parlar. Ve GitHub'ın kendi çatısı altında sunduğu GitHub Actions, bu süreci inanılmaz derecede basit ve erişilebilir hale getiriyor.

Bu rehber, sizi manuel dağıtımların ve belirsizliklerin karanlık dehlizlerinden çıkarıp, kodunuzun her bir commit'te otomatik olarak test edildiği, derlendiği ve dağıtıma hazır hale getirildiği aydınlık bir dünyaya taşıyacak. Kemerlerinizi bağlayın, otomasyon yolculuğuna çıkıyoruz!

1. Kod & Push

Geliştirici kodu yazar ve depoya gönderir.

git push

2. GitHub Actions

CI/CD iş akışı tetiklenir ve adımları çalıştırır.

✓ Test ✓ Build ✓ Deploy

3. Canlı Uygulama

Uygulama başarıyla sunucuda yayında.

✓ Başarılı

Bir CI/CD pipeline'ının temel adımları: Kod yazımından dağıtıma.

Bölüm 1: Kavramları Netleştirelim - CI/CD ve GitHub Actions Nedir?

  • Sürekli Entegrasyon (Continuous Integration - CI): Geliştiricilerin kod değişikliklerini sık sık merkezi bir depoda (repository) birleştirmesi pratiğidir. Her birleştirme, otomatik bir derleme (build) ve test süreci tarafından doğrulanır. Amaç, entegrasyon hatalarını erken tespit etmektir.
  • Sürekli Dağıtım/Teslimat (Continuous Deployment/Delivery - CD): CI sürecini başarıyla geçen kod değişikliklerinin otomatik olarak bir test veya üretim ortamına dağıtılmasıdır. Sürekli Teslimat, dağıtımın bir tuşa basılarak manuel yapılmasını, Sürekli Dağıtım ise tamamen otomatik yapılmasını ifade eder.
  • GitHub Actions: Kısacası, GitHub deponuzdaki olaylara (commit, pull request açılışı, vb.) tepki olarak otomatik iş akışları (workflows) çalıştırmanızı sağlayan bir otomasyon aracıdır. Bu iş akışları, CI/CD pipeline'ları oluşturmak için mükemmeldir.

Bölüm 2: İlk Workflow'umuzu Yazıyoruz - YAML'ın Gücü

GitHub Actions iş akışları, deponuzdaki .github/workflows/ dizininde bulunan YAML dosyaları ile tanımlanır. Şimdi basit bir Node.js projesi için bir CI pipeline'ı oluşturalım. Bu pipeline, her yeni commit'te veya pull request'te projenin bağımlılıklarını kuracak ve testleri çalıştıracak.

Dosya: .github/workflows/ci.yml


name: Node.js CI

# Bu iş akışının ne zaman tetikleneceğini belirler
on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

# Çalıştırılacak işleri (jobs) tanımlar
jobs:
  build:
    # İşin çalışacağı sanal makineyi belirtir
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [18.x, 20.x] # Farklı Node.js versiyonlarında test et

    # İşin adımlarını (steps) tanımlar
    steps:
    # 1. Adım: Depodaki kodu sanal makineye kopyala
    - name: Checkout repository
      uses: actions/checkout@v3

    # 2. Adım: Belirtilen Node.js versiyonunu kur
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm' # Bağımlılıkları cache'le

    # 3. Adım: Proje bağımlılıklarını kur
    - name: Install dependencies
      run: npm ci

    # 4. Adım: Testleri çalıştır
    - name: Run tests
      run: npm test
        

Bu dosyayı deponuza eklediğiniz an, GitHub Actions sihrini göstermeye başlayacaktır. Her 'push' veya 'pull request'te, "Actions" sekmesinde bu iş akışının çalıştığını görebilirsiniz.

Bölüm 3: CD Adımını Eklemek - Bir React Uygulamasını Otomatik Dağıtma

CI pipeline'ımız harika çalışıyor. Şimdi de 'main' branch'ine bir kod birleştirildiğinde, projemizi derleyip bir sunucuya (örneğin Netlify veya Vercel'e) otomatik olarak dağıtan CD adımını ekleyelim. Vercel CLI kullanarak bunu nasıl yapacağımıza bakalım.

Dosya: .github/workflows/deploy.yml


name: Deploy to Vercel

# Sadece 'main' branch'ine push yapıldığında tetiklenir
on:
  push:
    branches: [ "main" ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Use Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '20.x'
          cache: 'npm'
      
      - name: Install dependencies
        run: npm ci

      - name: Build project
        run: npm run build

      # Vercel'e dağıtım adımı
      - name: Deploy to Vercel
        run: npx vercel --prod --token=${{ secrets.VERCEL_TOKEN }}
        env:
          VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
          VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
        

Sırlar Nerede Saklanıyor?

Yukarıdaki kodda ${{ secrets.VERCEL_TOKEN }} gibi bir ifade fark ettiniz. API token'ları gibi hassas bilgileri asla YAML dosyasına doğrudan yazmamalısınız. Bunun yerine, GitHub deponuzun "Settings > Secrets and variables > Actions" bölümüne giderek bu bilgileri güvenli bir şekilde saklayabilirsiniz. GitHub Actions, bu 'secret'ları iş akışınız çalışırken güvenli bir şekilde kullanılabilir hale getirir.

Bölüm 4: Yaygın Hatalar ve En İyi Pratikler

  • Secrets Log'lara Sızdırmak: Bir 'secret'ı doğrudan echo gibi bir komutla basmaya çalışırsanız, GitHub bunu loglarda maskelemeye çalışır, ancak bu her zaman garantili değildir. Secret'ları sadece ilgili CLI komutlarının veya action'ların parametrelerinde kullanın.
  • Cache Kullanmamak: Her seferinde npm install çalıştırmak, özellikle büyük projelerde dakikalar sürebilir. actions/setup-node veya actions/cache gibi action'lar ile bağımlılıklarınızı cache'leyerek iş akışlarınızı önemli ölçüde hızlandırın.
  • Tek Bir Dev Job Dosyası: CI, CD, Linting gibi farklı görevleri tek bir devasa YAML dosyasında birleştirmek yerine, her birini kendi mantıksal dosyasına ayırın (ci.yml, deploy.yml). Bu, yönetimi kolaylaştırır.
  • Rol ve İzinleri Ayarlamamak: Özellikle açık kaynak projelerde, her pull request'in production'a dağıtım yapacak secret'lara erişmesini istemezsiniz. Farklı iş akışları için farklı izin seviyeleri belirleyin ve pull_request_target gibi tehlikeli olabilecek tetikleyicileri dikkatli kullanın.

Sonuç: Otomasyon Sadece Bir Araç Değil, Bir Kültürdür

GitHub Actions ile bir CI/CD pipeline'ı kurmak, ilk başta karmaşık görünebilir. Ancak bir kez kurduğunuzda, size ve ekibinize inanılmaz bir hız, güvenlik ve verimlilik kazandırır. Hatalar azalır, kod kalitesi artar ve en önemlisi, "acaba bu kod sunucuda çalışacak mı?" endişesi ortadan kalkar. Otomasyon, sadece YAML dosyaları yazmak değil, aynı zamanda daha iyi, daha güvenilir ve daha hızlı yazılım üretme kültürünü benimsemektir.