Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 13

Dissecting GitHub Actions: Workflows, Jobs, Steps, and Triggers

Recommended resources

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.

GitHub Actions Architecture
Bu şema, bir GitHub Actions iş akışının hiyerarşik yapısını gösterir. Her şey bir **Event** (olay) ile başlar, örneğin kodunuzu `push` etmeniz. Bu olay, belirli bir **Workflow**'u (iş akışını) tetikler. Workflow, bir veya daha fazla **Job** (iş) içerir. Her Job, bir **Runner** (çalıştırıcı) üzerinde yürütülür ve bir dizi **Step** (adım) içerir. Her adım ise bir komut çalıştırır veya `action` adı verilen yeniden kullanılabilir bir betiği kullanır.

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 run ile doğrudan komutlar çalıştırır ya da uses ile 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.