Kör om ditt GitHub-arbetsflöde automatiskt efter fel
Ibland är ditt GitHub Actions-arbetsflöde lynnig och misslyckas av slumpmässiga skäl. Låt oss se hur du automatiskt kan köra om det för att spara tid.
Introduktion
Vi älskar GitHub Actions. Det är kraftfullt och erbjuder en generös gratisnivå.
När vårt projekt växer har vi lagt till fler och fler integrationstester för att köra i vårt GitHub Actions-arbetsflöde. Precis som andra coola projekt kör vi våra tester för varje pull request, push och release.
Men på grund av integrationstesters natur misslyckas vårt arbetsflöde ibland av slumpmässiga skäl. Det kan vara ett nätverksproblem, en webbläsarproblem eller andra svårreproducerbara skäl.
När arbetsflödet misslyckas måste vi manuellt köra om det. Det är inte en stor sak i början, men det är ändå irriterande för högproduktivitet utvecklare som oss.
Hur det fungerar
Vid skrivningstillfället erbjuder GitHub Actions inte ett inbyggt sätt att automatiskt köra om ett misslyckat arbetsflöde. Så låt oss bryta ner det och se hur vi kan uppnå detta.
När ett arbetsflöde INTE körs och har misslyckats kan du manuellt köra om det genom att klicka på "Kör om jobb"-knappen. Det kommer att öppna en rullgardinsmeny och har ett trevligt "Kör om misslyckade jobb"-alternativ för att hoppa över de lyckade jobben.
Så idén är enkel:
- Vi behöver upptäcka när ett arbetsflöde har misslyckats.
- Vi behöver trigga omkörningsåtgärden EFTER att arbetsflödet avslutats.
Uppenbarligen kan vi inte göra detta i samma arbetsflöde eftersom ett arbetsflöde inte kan göra någonting när det inte körs. Så vi behöver ett annat arbetsflöde för att övervaka statusen för det tidigare arbetsflödet och trigga omkörningsåtgärden. Detta kan illustreras som följer:
Uppdatera dina arbetsflöden
Skapa en ny arbetsflödesfil i ditt arkiv, t.ex. .github/workflows/rerun.yml
:
Tack vare GitHub CLI kan vi enkelt övervaka statusen för ett arbetsflöde och köra om det med två enkla kommandon:
gh run watch
för att övervaka statusen för ett arbetsflöde (dokumentation här).gh run rerun
för att köra om ett arbetsflöde. Flaggan--failed
kommer bara att köra om de misslyckade jobben (dokumentation här).
Allt du behöver göra är att förse run_id
av det misslyckade arbetsflödet vilket kan göras genom att använda github.run_id
-kontexten. Till exempel kan du trigga omkörningsarbetsflödet genom att lägga till följande steg i ditt ursprungliga arbetsflöde:
Villkoret if: failure()
kommer bara att trigga steget när jobbet har misslyckats. Villkoret fromJSON(github.run_attempt) < 3
kommer bara att köra om de första 2 försöken. Du kan justera numret enligt dina behov.
Detta steg använder kommandot gh workflow run
för att trigga omkörningsarbetsflödet. Se dokumentationen för mer information.
Bonus: Kör omkörningsarbetsflödet från grenen som misslyckades
Om du vill köra om omkörningsarbetsflödet från grenen som misslyckades, istället för standardgrenen, kan du använda följande kommando:
Kontexten github.head_ref
kommer att användas om det är en pull request, annars kommer github.ref_name
att användas.
Krediter
Idén till detta tillvägagångssätt är ursprungligen från denna GitHub-diskussions kommentar.