Merhaba! Önceki dersimizde, pre-commit hook'larını kullanarak kodumuzu Git reposuna göndermeden önce yerel makinemizde kalite kontrollerini nasıl otomatikleştireceğimizi öğrendik. Bu, bireysel olarak kod kalitesini yüksek tutmak için harika bir adımdır.
Ancak, büyük projelerde ve ekiplerde, herkesin bu kurallara uyduğundan ve bu kontrollerin merkezi bir şekilde, her zaman çalıştığından emin olmamız gerekir. Ya bir ekip üyesi pre-commit'i kurmayı unutursa? İşte bu noktada Sürekli Entegrasyon (Continuous Integration - CI) devreye girer.
Bu dersle birlikte yeni bir modüle başlıyoruz: CI İşlem Hattı (Pipeline) Oluşturma. Amacımız, yerel otomasyondan bir adım öteye geçerek, kod repomuzdaki değişiklikleri otomatik olarak test eden ve doğrulayan bulut tabanlı bir sistem kurmak. Bu iş için endüstri standardı haline gelmiş olan GitHub Actions'ı kullanacağız.
Bugünkü Öğrenme Hedefimiz: Bir GitHub Actions iş akışı (workflow) dosyasını inceleyerek temel bileşenlerini—workflows, jobs, steps, triggers—tanımlamak.
GitHub Actions: Genel Bakış
Önceki derslerde odaklandığımız pre-commit, "commit" olayına tepki veren yerel bir otomasyondu. GitHub Actions ise, push, pull_request gibi GitHub üzerindeki olaylara tepki veren, sunucu tarafında çalışan bir otomasyon sistemidir.
Bu otomasyonlar, iş akışı (workflow) olarak adlandırılan ve projenizin .github/workflows/ dizininde bulunan YAML dosyalarıyla tanımlanır.
Bir iş akışının temel mimarisini anlamak için aşağıdaki şemayı inceleyelim.

Bu hiyerarşi, birazdan inceleyeceğimiz YAML dosyasının yapısını doğrudan yansıtır.
Bir İş Akışı Dosyasının Anatomisi
Şimdi, GitHub'ın kendi dokümantasyonundan alınan basit bir örnek YAML dosyasını inceleyerek bu bileşenleri tek tek tanıyalım.
Creating an example workflow - Understanding the workflow file
GitHub'ın resmi dokümanındaki bu bölüm, örnek bir iş akışı dosyasının her bir satırını açıklayarak temel bileşenleri anlamak için mükemmel bir başlangıç noktasıdır.
Metindeki 'Understanding the workflow file' başlığı altındaki bölümü okuyun. Özellikle name, on, jobs, runs-on, steps, uses ve run anahtar kelimelerinin ne anlama geldiğini açıklayan kısımlara odaklanın.
Okuduğunuz bölümdeki temel kavramları özetleyelim ve kendi projemizle ilişkilendirelim:
| Bileşen | YAML Anahtar Kelimesi | Açıklama |
|---|---|---|
| Workflow | name |
İş akışının tamamına verilen isim. GitHub'ın "Actions" sekmesinde bu isimle görünür. (Örn: CI Pipeline) |
| Trigger | on |
İş akışını neyin tetikleyeceğini belirten olay (event). on: [push] demek, bu repoya her kod itildiğinde iş akışının çalışması demektir. pull_request gibi başka olaylar da olabilir. |
| Job | jobs |
İş akışı içindeki işlerin listesi. Her iş (job) kendi runner'ında (çalıştırıcı sanal makine) çalışır ve adımlardan oluşur. |
| Runner | runs-on |
Job'un hangi sanal makinede çalışacağını belirtir. ubuntu-latest, windows-latest, macos-latest gibi seçenekler bulunur. Genellikle Linux tabanlı ubuntu-latest kullanılır. |
| Step | steps |
Bir job içinde sırayla çalıştırılan adımların listesidir. Her adım ya bir komut çalıştırır ya da hazır bir action kullanır. |
| Action | uses |
Başkaları tarafından oluşturulmuş, yeniden kullanılabilir bir adımı (action) iş akışınıza ekler. En yaygın olanı actions/checkout@v5'tir; bu, reponuzdaki kodun runner'a kopyalanmasını sağlar. |
| Command | run |
runner'ın terminalinde doğrudan bir komut çalıştırır. Örneğin, run: pip install -r requirements.txt veya run: pytest. |
Bu bileşenlerin bir araya geldiği basit bir "Merhaba Dünya" iş akışı şöyle görünürdü:
# .github/workflows/hello.yml
# 1. Workflow'un Adı
name: Say Hello
# 2. Trigger (Tetikleyici)
on: [push]
# 3. Jobs (İşler)
jobs:
# 'say_hello_job' adında tek bir iş
say_hello_job:
# 4. Runner (Çalıştırıcı)
runs-on: ubuntu-latest
# 5. Steps (Adımlar)
steps:
- name: Say Hello Step
run: echo "Hello, GitHub Actions!"
Konseptleri Video ile Pekiştirme
Şimdi bu temel yapı taşlarının pratikte nasıl bir araya geldiğini gösteren bir video izleyelim. Bu video, basit bir iş akışının nasıl oluşturulduğunu ve temel bileşenlerin YAML dosyasında nasıl yer aldığını adım adım gösteriyor.
GitHub Actions Step by Step DEMO for Beginners
Automation Step by Step kanalından bu video, GitHub Actions'ın temel terminolojisini (workflow, event, job, step) basit bir örnek üzerinden harika bir şekilde açıklıyor.
Videonun iki bölümünü izlemenizi rica ediyorum: 10:35 - 12:38 arası: Bu bölümde, basit bir 'Hello World' YAML dosyasının yapısı (name, on, jobs, steps) anlatılıyor. Bu, yukarıda öğrendiğimiz teorik bilgilerin pratik bir örnekte nasıl göründüğünü pekiştirecek. 19:27 - 22:25 arası: Burada ise, aynı temel terimler (workflow, events, jobs, steps) ve YAML'deki anahtar kelimeleri tekrar özetleniyor. Bu bölüm, öğrendiklerinizi sağlamlaştırmanıza yardımcı olacaktır.
Sonuç
Bugünkü dersimizde, bir CI sisteminin temelini oluşturan GitHub Actions iş akışlarının yapı taşlarını öğrendik. Artık bir .yml dosyasına baktığınızda, hangi bölümün ne işe yaradığını anlayabilirsiniz.
Temel Çıkarımlar:
- GitHub Actions iş akışları,
.github/workflows/klasöründeki YAML dosyaları ile tanımlanır. - Her iş akışı bir olay (trigger) ile tetiklenir (
on). - İş akışları, sanal makinelerde (
runs-on) çalışan bir veya daha fazla işten (job) oluşur. - Her iş, sıralı olarak yürütülen adımlardan (step) oluşur.
- Adımlar, ya
runile doğrudan komutlar çalıştırır ya dausesile hazır eylemleri (action) kullanır.
Bu temel bileşenleri anlamak, kendi PySpark ETL iş akışlarımız için karmaşık CI/CD pipeline'ları oluştururken bize sağlam bir zemin sağlayacaktır.
Gelecek Dersin Önizlemesi:
Bugün bir iş akışı dosyasını "okumayı" öğrendik. Bir sonraki dersimizde ise ilk pratik adımımızı atarak kendi iş akışımızı "yazacağız". push ve pull_request olayları tarafından tetiklenecek, Python ortamını kuracak ve önceki modüllerde yazdığımız pytest testlerini otomatik olarak çalıştıracak bir GitHub Actions YAML dosyası oluşturacağız.