Dependent Jobs
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,
needsile belirttiğin job’ların başarılı sonuçlanması gerekir (varsayılan olaraksuccess()), aksi halde dependent job tetiklenmez.
ifile 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:
needsekleyerek, “job2, job1 bitmeden başlamasın” gibi bir sıra tanımı yaparsın. Örnek:
jobs:
job1:
runs-on: ubuntu-latest
steps:
- run: echo "Job 1"
job2:
needs: job1 # job1 bitmeden job2 başlamaz
runs-on: ubuntu-latest
steps:
- run: echo "Job 2"
job3:
needs: [job1, job2] # job3, job1 ve job2 tamamlanınca başlar
runs-on: ubuntu-latest
steps:
- run: echo "Job 3"
Bu senaryoda:
job1doğrudan başlar (çünkü bir bağımlılığı yok).job2ancakjob1tamamlanınca (success) başlayabilir.job3de hemjob1hemjob2tamamlanı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:
if: ${{ success() }}
needs: job1success()→ Dependent job’(lar) başarıyla bitmişsetrue.Başarısız (
fail) olsa step hiç çalışmaz.
Her Zaman Çalıştır:
if: ${{ always() }}
needs: job1Bağı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:
if: ${{ needs.job1.outputs.some_value == 'ok' }}
needs: job1Burada “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.
Last updated
Was this helpful?