GitHub Actions ile CI/CD Pipeline Oluşturma Rehberi 2026

ÖZET

GitHub Actions ile CI/CD Pipeline Oluşturma

GitHub Actions kullanarak otomatik test, derleme ve dağıtım süreçleri için CI/CD pipeline’ları oluşturmaya yönelik kapsamlı bir rehber.

Keywords: GitHub Actions, CI/CD, Otomatik Dağıtım


İÇİNDEKİLER

1. Giriş: Neden GitHub Actions ve CI/CD?

2. GitHub Actions Temelleri: Kavramlar ve Yapı

3. CI Pipeline Oluşturma: Derleme ve Test

4. CD Pipeline Oluşturma: Dağıtım Stratejileri

5. Gelişmiş GitHub Actions Özellikleri

6. Güvenlik ve En İyi Uygulamalar

7. Performans ve Maliyet Optimizasyonu

8. Sıkça Sorulan Sorular (FAQ)


GİRİŞ

Neden GitHub Actions ve CI/CD?


Yazılım geliştirme süreçleri, 2026 itibarıyla her zamankinden daha dinamik ve hızlı. Rekabetçi bir pazarda ayakta kalmak ve kullanıcı beklentilerini karşılamak için ekiplerin sürekli entegrasyon (CI) ve sürekli dağıtım (CD) pratiklerini benimsemesi kaçınılmaz hale geldi. CI/CD, kod değişikliklerinin otomatik olarak derlenmesini, test edilmesini ve dağıtılmasını sağlayarak geliştirme döngüsünü hızlandırır, hataları erken aşamada tespit eder ve kaliteli yazılım teslimatını güvence altına alır.

Peki, bu süreçleri otomatize etmek için neden GitHub Actions’ı tercih etmeliyiz? GitHub Actions, doğrudan GitHub deponuzla entegre çalışan, esnek ve güçlü bir CI/CD platformudur. Kodunuzun bulunduğu yerle aynı ekosistemde çalışması, kurulum ve yönetim maliyetlerini önemli ölçüde azaltır. Ayrıca, geniş bir açık kaynak topluluğu tarafından desteklenen binlerce hazır aksiyon sayesinde, karmaşık iş akışlarını bile kolayca oluşturabilirsiniz. Microsoft’un 2025 raporlarına göre, DevOps ekiplerinin %70’inden fazlası, CI/CD süreçlerinde bulut tabanlı otomasyon araçlarını tercih etmekte ve GitHub Actions bu alanda lider konumunu sürdürmektedir.

ÖNEMLİ NOKTA

GitHub Actions, kod deponuzla entegre çalışarak CI/CD süreçlerini basitleştiren ve geliştirme hızını artıran güçlü bir otomasyon aracıdır. Geliştirici verimliliğini %30’a kadar artırabilir.


Bu kapsamlı rehberde, 2026 yılına uygun olarak GitHub Actions ile CI/CD pipeline’ları oluşturmanın tüm adımlarını, gerçek dünya örnekleri ve en iyi uygulamalarla ele alacağız. Geliştirme süreçlerinizi nasıl daha verimli ve güvenilir hale getirebileceğinizi adım adım keşfedeceksiniz.

CI/CD Süreç Akış Diyagramı


TEMELLER

GitHub Actions Temelleri: Kavramlar ve Yapı


GitHub Actions, iş akışlarınızı tanımlamak için YAML dosyalarını kullanır. Bu YAML dosyaları, deponuzun kök dizinindeki .github/workflows/ klasöründe bulunur. Bir GitHub Actions iş akışı, belirli olaylara tepki veren bir dizi adımdan oluşur. İşte temel kavramlar:

Workflow (İş Akışı): Bir veya daha fazla iş (job) içeren otomatikleştirilmiş bir süreç. YAML dosyası ile tanımlanır.

Event (Olay): İş akışını tetikleyen belirli bir aktivite (örn. koda push, pull request açma, zamanlanmış görev).

Job (İş): Bir sanal makine (runner) üzerinde çalışan bir dizi adım. Her iş bağımsız olarak çalışır ve kendi ortamına sahiptir.

Step (Adım): Bir iş içindeki tek bir görev. Bir komut satırı betiği veya bir aksiyon (action) olabilir.

Action (Aksiyon): Bir iş akışında kullanılabilen, yeniden kullanılabilir bir birim. GitHub Marketplace’ten veya özel olarak oluşturulabilir.

Runner (Çalıştırıcı): İş akışınızın adımlarını yürüten sunucu. GitHub tarafından barındırılan (hosted) veya kendi barındırdığınız (self-hosted) çalıştırıcılar olabilir.

KOD AÇIKLAMASI

Aşağıdaki basit iş akışı, her push olayında otomatik olarak tetiklenir ve bir “Hello World” mesajı yazdırır. Bu, GitHub Actions’ın temel yapısını anlamak için iyi bir başlangıç noktasıdır.

name: İlk Basit İş Akışı

on: [push]

jobs:
  selamlama-isi:
    runs-on: ubuntu-latest
    steps:
      - name: Depoyu Çıkart
        uses: actions/checkout@v4
      - name: Selamlama Mesajı
        run: echo "Merhaba, GitHub Actions!"

ÖNEMLİ NOKTA

GitHub Actions YAML dosyaları, iş akışının adını, tetikleyici olayları, işleri ve her işin içindeki adımları açıkça tanımlar. Anlaşılır ve modüler bir yapı sunar.


CI PIPELINE

CI Pipeline Oluşturma: Derleme ve Test


Sürekli entegrasyon (CI) pipeline’ı, her kod değişikliğinde projenizin otomatik olarak derlenmesini ve test edilmesini sağlar. Bu, hataların erken aşamada yakalanmasına ve kod tabanınızın her zaman kararlı kalmasına yardımcı olur. Aşağıda, bir Node.js projesi için tipik bir CI pipeline’ının nasıl oluşturulacağını gösteren bir örnek bulunmaktadır. Bu örnek, bağımlılıkların yüklenmesi, projenin derlenmesi (varsa) ve birim testlerinin çalıştırılması adımlarını içerir.

Node.js Projesi İçin CI Akışı

Bu akışta, on: push ve pull_request olaylarında tetiklenmek üzere ayarlanmıştır. ubuntu-latest çalıştırıcısında çalışır ve Node.js 18.x sürümünü kullanır. Bağımlılıklar önbelleğe alınarak sonraki çalıştırmaların hızı artırılır.

KOD AÇIKLAMASI

Bu GitHub Actions iş akışı, bir Node.js projesi için sürekli entegrasyon (CI) adımlarını tanımlar. Kod her push veya pull_request edildiğinde tetiklenir, Node.js ortamını kurar, bağımlılıkları yükler ve testleri çalıştırır.

name: Node.js CI Pipeline

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

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

    steps:
    - name: Depoyu Çıkart
      uses: actions/checkout@v4

    - name: Node.js Ortamını Kur
      uses: actions/setup-node@v4
      with:
        node-version: '18.x'
        cache: 'npm' # npm bağımlılıklarını önbelleğe al

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

    - name: Projeyi Derle (Opsiyonel, TypeScript vb. için)
      run: npm run build # Eğer bir build adımı varsa (örn. TypeScript)

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

ÖNEMLİ NOKTA

Bağımlılık önbellekleme, CI/CD pipeline’larının çalışma süresini önemli ölçüde kısaltabilir. actions/setup-node@v4 gibi aksiyonlar, bunu otomatik olarak yönetir.


SORUN 01

Farklı Ortamlar İçin Bağımlılık Yönetimi

Geliştirme, test ve üretim ortamları için farklı bağımlılıklar veya yapılandırmalar gerekebilir. Bu durum, CI/CD pipeline’larında tutarlılık sorunlarına yol açabilir.

ÇÖZÜM — Ortam Değişkenleri ve Koşullu Yükleme

GitHub Actions, ortam değişkenlerini ve koşullu adımları kullanarak farklı ortamlar için özelleştirilmiş bağımlılık yönetimi sağlar. Örneğin, sadece test ortamında gerekli olan bağımlılıkları koşullu olarak yükleyebilirsiniz.

- name: Sadece Test Ortamı Bağımlılıklarını Yükle
  if: github.ref == 'refs/heads/develop' # 'develop' dalında ise
  run: npm install --only=dev

CI Pipeline Aşamaları Akış Şeması

CD PIPELINE

CD Pipeline Oluşturma: Dağıtım Stratejileri


Sürekli dağıtım (CD) pipeline’ı, CI aşamasında başarılı olan ve testleri geçen kodun otomatik olarak üretim veya diğer ortamlara dağıtılmasını sağlar. Bu süreç, manuel hataları ortadan kaldırır ve dağıtım hızını artırır. Güvenli ve kesintisiz dağıtım için çeşitli stratejiler mevcuttur.

Yaygın Dağıtım Stratejileri

Mavi/Yeşil Dağıtım: İki ayrı, özdeş üretim ortamı (Mavi ve Yeşil) kullanılır. Yeni sürüm Yeşil ortama dağıtılır, test edilir ve ardından trafik Yeşil ortama yönlendirilir. Hata durumunda, trafik kolayca Mavi ortama geri döndürülebilir. Bu, sıfır kesinti süresi sağlar.

Kanarya Dağıtımı: Yeni sürüm, kullanıcıların küçük bir alt kümesine (kanarya grubu) dağıtılır. Performansı ve hataları izlenir. Herhangi bir sorun yoksa, sürüm kademeli olarak daha fazla kullanıcıya yayılır. Riskleri minimize eder.

Rolling Dağıtım: Yeni sürüm, sunucuların veya kapsayıcıların bir alt kümesine dağıtılırken, eski sürüm hala trafik almaktadır. Yeni sürümün kararlılığı onaylandıkça, kalan sunucular da güncellenir. Daha az kaynak gerektirir ancak geri dönüşü daha karmaşık olabilir.

Aşağıda, bir web uygulamasını Azure App Service’e dağıtan basit bir CD iş akışı örneği verilmiştir. Bu örnek, bir önceki CI adımında oluşturulan derleme çıktısını (artifact) kullanır.

KOD AÇIKLAMASI

Bu iş akışı, bir önceki build-and-test işinden bağımlı olarak çalışır. Yalnızca main dalına yapılan push olaylarında tetiklenir. Derleme çıktısını indirir ve bir Azure App Service’e dağıtır. Dağıtım için Azure kimlik bilgilerini GitHub Secrets üzerinden güvenli bir şekilde alır.

name: Azure CD Pipeline

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    needs: build-and-test # CI pipeline'ının başarılı olmasını bekler
    environment: Production # Dağıtım ortamını tanımla

    steps:
    - name: Depoyu Çıkart
      uses: actions/checkout@v4

    - name: Derleme Çıktısını İndir
      uses: actions/download-artifact@v4
      with:
        name: my-app-build # CI pipeline'ında yüklenen artifact adı

    - name: Azure Login
      uses: azure/login@v1
      with:
        creds: ${{ secrets.AZURE_CREDENTIALS }} # GitHub Secret olarak saklanan Azure kimlik bilgileri

    - name: Azure Web Uygulamasına Dağıt
      uses: azure/webapps-deploy@v2
      with:
        app-name: 'my-kwontrol-app-2026' # Azure App Service adınız
        slot-name: 'production'
        package: '.' # Dağıtılacak paket (indirilen artifact)

ÖNEMLİ NOKTA

Dağıtım süreçlerinde secrets kullanımı kritik öneme sahiptir. Hassas bilgileri (API anahtarları, veritabanı bağlantı dizeleri) doğrudan YAML dosyasına yazmak yerine GitHub Secrets’ta saklayın.


CD Dağıtım Stratejileri Diyagramı

GELİŞMİŞ ÖZELLİKLER

Gelişmiş GitHub Actions Özellikleri


GitHub Actions, basit CI/CD pipeline’larının ötesine geçen birçok gelişmiş özellik sunar. Bu özellikler, daha karmaşık senaryoları yönetmenize, iş akışlarınızı daha esnek hale getirmenize ve tekrarlayan görevleri optimize etmenize yardımcı olur.

Matrix Stratejileri

Matrix stratejileri, aynı işi birden fazla konfigürasyonla çalıştırmanıza olanak tanır. Örneğin, projenizi farklı işletim sistemlerinde, farklı programlama dili sürümlerinde veya farklı bağımlılık setleriyle test edebilirsiniz. Bu, test kapsamını artırır ve uyumluluk sorunlarını erken tespit etmenizi sağlar.

KOD AÇIKLAMASI

Bu örnek, bir Node.js projesini hem Node.js 16.x hem de 18.x sürümlerinde ve hem Ubuntu hem de Windows işletim sistemlerinde test etmek için bir matrix stratejisi kullanır. Bu, uygulamanızın farklı ortamlarda doğru çalıştığından emin olmanızı sağlar.

jobs:
  matrix-test:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        node-version: [16.x, 18.x]
        os: [ubuntu-latest, windows-latest]

    steps:
    - uses: actions/checkout@v4
    - name: Node.js ${{ matrix.node-version }} Ortamını Kur
      uses: actions/setup-node@v4
      with:
        node-version: ${{ matrix.node-version }}
    - name: Bağımlılıkları Yükle
      run: npm install
    - name: Testleri Çalıştır
      run: npm test

Ortamlar ve Sırlar (Environments and Secrets)

GitHub Actions, farklı dağıtım ortamları (örn. Geliştirme, Staging, Üretim) tanımlamanıza ve bu ortamlara özgü sırlar, koruma kuralları ve onay süreçleri atamanıza olanak tanır. Bu, hassas üretim ortamlarının güvenliğini artırır ve dağıtım öncesi manuel onay gereksinimlerini karşılar.

ÖNEMLİ NOKTA

Ortamlar, özellikle üretim dağıtımları için ek güvenlik ve onay katmanları sağlamak amacıyla kullanılır. Bu, dağıtımın yanlışlıkla veya yetkisiz bir şekilde yapılmasını engeller.


GitHub Actions Sırlar Yönetimi Arayüzü


Yeniden Kullanılabilir İş Akışları (Reusable Workflows)

Birçok projenizde veya aynı projenin farklı dallarında benzer iş akışı adımları olabilir. Yeniden kullanılabilir iş akışları, bu adımları tek bir yerde tanımlayıp birden fazla iş akışında çağırarak DRY (Don’t Repeat Yourself) prensibini uygulamanızı sağlar. Bu, iş akışı yönetimini basitleştirir ve tutarlılığı artırır.

KOD AÇIKLAMASI

Bu örnek, .github/workflows/reusable-build.yml dosyasında tanımlanmış bir yeniden kullanılabilir iş akışını çağıran bir ana iş akışını gösterir. Bu, derleme mantığını merkezi bir yerde tutmanızı sağlar.

# .github/workflows/main.yml (Ana İş Akışı)
name: Ana Uygulama CI/CD

on: [push]

jobs:
  call-build:
    uses: ./.github/workflows/reusable-build.yml # Yeniden kullanılabilir iş akışını çağır
    with:
      node_version: '18.x' # Parametre geçişi
# .github/workflows/reusable-build.yml (Yeniden Kullanılabilir İş Akışı)
name: Yeniden Kullanılabilir Derleme

on:
  workflow_call:
    inputs:
      node_version:
        required: true
        type: string

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: Node.js Ortamını Kur
      uses: actions/setup-node@v4
      with:
        node-version: ${{ inputs.node_version }}
    - run: npm install
    - run: npm run build

GÜVENLİK

Güvenlik ve En İyi Uygulamalar


CI/CD pipeline’ları, otomatikleştirilmiş süreçler sayesinde verimliliği artırsa da, güvenlik açıklarına karşı dikkatli olunması gereken kritik noktalardır. Yanlış yapılandırılmış bir iş akışı, hassas verilere erişim sağlayabilir veya kötü niyetli kodların üretim ortamına dağıtılmasına yol açabilir.

GitHub Secrets Kullanımı

Hassas bilgileri (API anahtarları, veritabanı şifreleri, bulut sağlayıcısı kimlik bilgileri) doğrudan YAML dosyalarına veya kod tabanına yazmaktan kesinlikle kaçının. GitHub Secrets, bu tür bilgileri güvenli bir şekilde saklamak için tasarlanmıştır. Sırlar, iş akışları çalıştırılırken ortam değişkenleri olarak erişilebilir hale gelir ancak loglarda asla görünmezler.

ÖNEMLİ NOKTA

Sırlar, deponuzda veya kuruluş düzeyinde tanımlanabilir. Ortam bazlı sırlar, belirli dağıtım ortamları için ek güvenlik katmanı sağlar ve manuel onay gerektirebilir.


En Az Ayrıcalık Prensibi

İş akışlarınızın ve kullandığı aksiyonların yalnızca görevlerini yerine getirmek için gereken minimum ayrıcalıklara sahip olduğundan emin olun. Örneğin, bir dağıtım iş akışı yalnızca hedef ortama dağıtım yapma iznine sahip olmalı, diğer hassas kaynaklara erişmemelidir. GitHub Actions’ın varsayılan GITHUB_TOKEN izinlerini permissions anahtar kelimesiyle kısıtlayabilirsiniz.

KOD AÇIKLAMASI

Bu örnek, iş akışının GITHUB_TOKEN için yalnızca contents: read izni verir. Bu, gereksiz ayrıcalıkları kısıtlayarak güvenlik riskini azaltır.

jobs:
  guvenli-is:
    runs-on: ubuntu-latest
    permissions:
      contents: read # Sadece depo içeriğini okuma izni
      pull-requests: write # Opsiyonel: Pull request yorumu yazma izni
    steps:
      - uses: actions/checkout@v4
      - run: echo "Güvenli işlem"

UYARI

Üçüncü taraf aksiyonları kullanırken dikkatli olun. Bilinmeyen veya güvenilmeyen kaynaklardan gelen aksiyonlar güvenlik açıkları içerebilir. Her zaman resmi veya topluluk tarafından geniş çapta kullanılan ve denetlenen aksiyonları tercih edin.


OPTİMİZASYON

Performans ve Maliyet Optimizasyonu


Büyük projelerde veya sık sık tetiklenen iş akışlarında, GitHub Actions’ın çalışma süreleri ve dolayısıyla maliyetleri önemli hale gelebilir. İş akışlarınızı optimize etmek, hem zaman hem de para tasarrufu sağlamanın anahtarıdır.

Önbellekleme (Caching)

Bağımlılıkların veya derleme çıktılarının her iş akışı çalıştırmasında yeniden indirilmesi/derlenmesi yerine önbelleğe alınması, çalışma sürelerini önemli ölçüde azaltır. Örneğin, Node.js projeleri için npm veya yarn paketlerinin önbelleğe alınması standart bir uygulamadır. actions/cache@v3 aksiyonu, bu amaçla kullanılabilir.

KOD AÇIKLAMASI

Bu kod bloğu, Node.js bağımlılıklarını önbelleğe alarak sonraki iş akışı çalıştırmalarında npm install süresini kısaltır. hashFiles('**/package-lock.json'), package-lock.json dosyası değiştiğinde yeni bir önbellek anahtarı oluşturulmasını sağlar.

- name: npm bağımlılıklarını önbelleğe al
  uses: actions/cache@v4
  with:
    path: ~/.npm
    key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
    restore-keys: |
      ${{ runner.os }}-node-
- name: Bağımlılıkları Yükle
  run: npm install

Paralel Çalıştırma ve Koşullu Adımlar

Bir iş akışındaki bağımsız işleri paralel olarak çalıştırarak toplam süreyi azaltabilirsiniz. Örneğin, bir iş uygulamanızı derlerken, diğer bir iş bağımsız olarak statik kod analizini çalıştırabilir. Ayrıca, if koşulları kullanarak sadece belirli durumlarda çalıştırılması gereken adımları tanımlayabilirsiniz. Örneğin, sadece main dalına yapılan push‘larda üretim dağıtımı yapmak gibi.

ÖNEMLİ NOKTA

Self-hosted (kendi barındırdığınız) çalıştırıcılar, özel donanım gereksinimleri olan veya GitHub tarafından sunulan çalıştırıcıların maliyetinden tasarruf etmek isteyen ekipler için uygun bir seçenek olabilir. Ancak, bunların yönetimi ek sorumluluk getirir.


GitHub Actions Performans Metrikleri Grafiği

Sıkça Sorulan Sorular (FAQ)

Q. GitHub Actions’ı kullanmak ücretsiz mi?

A. GitHub Actions, herkese açık depolar için ücretsizdir. Özel depolar için ise belirli bir ücretsiz kullanım kotası bulunur. Bu kotayı aştığınızda kullanımınıza göre ücretlendirilirsiniz. 2026 itibarıyla bu politika devam etmektedir.

Q. GitHub Actions ile hangi programlama dillerini kullanabilirim?

A. GitHub Actions, çoğu popüler programlama dilini (Node.js, Python, Java, .NET, Go, Ruby vb.) destekler. Gerekli ortamı kurmak için setup-* aksiyonlarını kullanabilirsiniz.

Q. CI/CD pipeline’ımı başka bir bulut sağlayıcısına (örn. AWS, GCP) nasıl dağıtabilirim?

A. GitHub Marketplace’te AWS, GCP ve diğer birçok bulut sağlayıcısı için resmi veya topluluk destekli aksiyonlar mevcuttur. Bu aksiyonları kullanarak bulut kimlik bilgilerinizi GitHub Secrets’ta saklayarak güvenli bir şekilde dağıtım yapabilirsiniz.

Q. GitHub Actions runner’ları nerede çalışır?

A. İş akışlarınız GitHub tarafından barındırılan sanal makinelerde (Ubuntu, Windows, macOS) veya kendi sunucularınızda (self-hosted runner) çalışabilir. Self-hosted runner’lar, özel donanım veya ağ erişimi gerektiren durumlar için idealdir.


Okuduğunuz için teşekkürler!

GitHub Actions ile CI/CD pipeline’ları oluşturmak, modern yazılım geliştirme süreçlerinin vazgeçilmez bir parçasıdır. Bu rehberde ele aldığımız bilgiler ve örneklerle, 2026 ve sonrasında projelerinizde sürekli entegrasyon ve dağıtım pratiklerini başarıyla uygulayabilir, geliştirme hızınızı artırabilir ve yazılım kalitesini güvence altına alabilirsiniz. Otomasyon, geleceğin anahtarıdır ve GitHub Actions bu kapıyı aralamanız için güçlü bir araç sunar.

Sorularınız mı var? Yorum bırakın veya Kwontrol.com adresini ziyaret edin!