Ö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
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.

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.

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.

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.

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.

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!