Türkçe
  • github
  • otomasyon

GitHub iş akışınız başarısız olduktan sonra otomatik olarak yeniden çalıştırın

Bazen GitHub Actions iş akışınız kaprisli olabilir ve rastgele nedenlerle başarısız olabilir. Zaman kazanmanız için bunu otomatik olarak nasıl yeniden çalıştırabileceğinizi görelim.

Gao
Gao
Founder

Giriş

GitHub Actions'u seviyoruz. Güçlüdür ve cömert bir ücretsiz katman sunar.

Projemiz büyüdükçe, GitHub Actions iş akışımızda çalışacak daha fazla entegrasyon testi ekledik. Diğer havalı projeler gibi, testlerimizi her çekme isteği, itme ve sürümde çalıştırıyoruz.

Ancak, entegrasyon testlerinin doğası gereği, bazen iş akışımız rastgele nedenlerle başarısız olabilir. Bu bir ağ sorunu, tarayıcı aksaması veya tekrarlanması zor diğer nedenler olabilir.

İş akışı başarısız olduğunda, onu manuel olarak yeniden çalıştırmamız gerekiyor. Başlangıçta bu büyük bir sorun değil, ancak bizim gibi yüksek verimli geliştiriciler için hala can sıkıcıdır.

Nasıl çalışır

Bu yazının yazıldığı sırada, GitHub Actions başarısız bir iş akışını otomatik olarak yeniden çalıştırmak için yerleşik bir yol sunmuyor. Bu nedenle bunu nasıl başarabileceğimizi inceleyelim.

Bir iş akışı ÇALIŞMIYOR ve başarısız olmuşsa, "İşleri yeniden çalıştır" düğmesine tıklayarak manuel olarak yeniden çalıştırabilirsiniz. Bu, başarılı işleri atlamak için güzel bir "Başarısız işleri yeniden çalıştır" seçeneği sunan bir açılır menü açacaktır.

Yani fikir basit:

  1. Bir iş akışının başarısız olduğunu tespit etmeliyiz.
  2. İş akışı sonuçlandıktan SONRA yeniden çalıştırma işlemini tetiklemeliyiz.

Açıkçası, bunu aynı iş akışında yapamayız çünkü bir iş akışı çalışmıyorken hiçbir şey yapamaz. Bu yüzden önceki iş akışının durumunu izlemek ve yeniden çalıştırma eylemini tetiklemek için başka bir iş akışına ihtiyacımız var. Bu şu şekilde görselleştirilebilir:

İş akışlarınızı güncelleyin

Depolarınıza yeni bir iş akışı dosyası oluşturun, örneğin, .github/workflows/rerun.yml:

GitHub CLI sayesinde, bir iş akışının durumunu kolayca izleyebilir ve iki basit komutla yeniden çalıştırabilirsiniz:

  • gh run watch, bir iş akışının durumunu izlemek için (dokümanlar burada).
  • gh run rerun, bir iş akışını yeniden çalıştırmak için. --failed bayrağı yalnızca başarısız işleri yeniden çalıştırır (dokümanlar burada).

Yapmanız gereken tek şey, başarısız iş akışının run_idsini sağlamaktır, bu da github.run_id bağlamını kullanarak yapılabilir. Örneğin, orijinal iş akışınıza aşağıdaki adımı ekleyerek yeniden çalıştırma iş akışını tetikleyebilirsiniz:

if: failure() koşulu, adımın yalnızca iş başarısız olduğunda tetiklenmesini sağlar. fromJSON(github.run_attempt) < 3 koşulu ise yalnızca ilk 2 denemeyi yeniden çalıştırır. Sayıyı ihtiyaçlarınıza göre ayarlayabilirsiniz.

Bu adım, yeniden çalıştırma iş akışını tetiklemek için gh workflow run komutunu kullanır. Daha fazla bilgi için dokümana bakın.

Bonus: Başarısız olan daldan yeniden çalıştırma iş akışını çalıştırın

Yeniden çalıştırma iş akışını varsayılan dal yerine başarısız olan daldan çalıştırmak isterseniz, aşağıdaki komutu kullanabilirsiniz:

github.head_ref bağlamı çekme isteği durumunda kullanılacaktır, aksi halde github.ref_name kullanılacaktır.

Krediler

Bu yaklaşımın fikri, bu GitHub tartışması yorumu'ndan alınmıştır.