GitHub Actions’da Dependent Jobs, bir job’un başka bir job’un (veya job’ların) tamamlanmasını bekledikten sonra çalışması anlamına gelir. Böylece iş akışında varsayılan “paralel çalışma” davranışını değiştirip, sıralı veya kademeli bir yapı oluşturabilirsin. Bunun için temel olarak:
needs
özelliğini kullanırsın:jobs.<job_id>.needs: <önceki_job_adı>
veya[önceki_job1, önceki_job2, ...]
şeklinde yazıldığında, bu job ancak ihtiyaç duyduğu job’lar bitince başlar.Ayrıca,
needs
ile belirttiğin job’ların başarılı sonuçlanması gerekir (varsayılan olaraksuccess()
), aksi halde dependent job tetiklenmez.
if
ile ek koşullar ekleyebilirsin:jobs.<job_id>.if: ${{ success() }}
gibi bir ifade, bu job’un ancak tüm dependent job’lar hatasız biterse çalışmasını sağlar.if: ${{ always() }}
dersen, bağımlı job’lar hata alsa bile (fail olsa bile) yine bu job’u çalıştırabilirsin. Örneğin cleanup aşamalarında kullanılır.
Nasıl Çalışır?
Varsayılan Paralellik: GitHub Actions, aynı Workflow içindeki job’ları birbirinden bağımsız (parallel) çalıştırır.
Sıralı İlerleme:
needs
ekleyerek, “job2, job1 bitmeden başlamasın” gibi bir sıra tanımı yaparsın. Örnek:
Bu senaryoda:
job1
doğrudan başlar (çünkü bir bağımlılığı yok).job2
ancakjob1
tamamlanınca (success) başlayabilir.job3
de hemjob1
hemjob2
tamamlanınca devreye girer.
“if” Koşulları
needs
ile belirttiğin job’ların sonucuna göre daha ince ayarlar da yapabilirsin:
Sadece Başarılı Sonuçta:
success()
→ Dependent job’(lar) başarıyla bitmişsetrue
.Başarısız (
fail
) olsa step hiç çalışmaz.
Her Zaman Çalıştır:
Bağımlı job hata alsa bile bu job devreye girer. Mesela hataları temizlemek, log göndermek vs. için kullanılır.
Belirli Bir Koşulla:
Burada “job1”’in ürettiği bir output değerine bakarak, job2’yi koşturup koşturmamaya karar verebilirsin.
Özeti
needs
: Job’ları birbirine bağımlı hale getirir, sıralı çalıştırma sağlar.if
: Ek koşullar ekleyip, “bağımlı job fail olsa da/olmasa da” senaryolarını yönetmeye yarar.Bu sayede CI/CD sürecinde, “Önce
build
→ Sonratest
→ Sonradeploy
” gibi aşamalı bir akış oluşturabilirsin veya test başarısızsa deploy’u otomatik olarak iptal edebilirsin.
GitHub Actions’da iki önemli “katman” vardır:
Job’lar (jobs): Aynı workflow içinde tanımlanan bölümler.
Adımlar (steps): Bir job’un içindeki, sırasıyla yürütülen komut veya eylemler.
Adımlar (steps) her zaman sırayla (top-down) çalışır, yani job içindeki Step 1 → Step 2 → Step 3 şeklinde. Fakat job’lar (örneğin job1
, job2
, job3
), aynı workflow içinde paralel olarak başlarlar. Yani “job1” bitene kadar “job2” otomatik beklemeye girmiyor; GitHub ikisini aynı anda koşturmaya çalışır.
Last updated
Was this helpful?