Je GitHub workflow automatisch opnieuw uitvoeren na een mislukking
Soms is je GitHub Actions workflow grillig en mislukt om willekeurige redenen. Laten we eens kijken hoe je het automatisch opnieuw kunt laten uitvoeren om tijd te besparen.
Soms is je GitHub Actions workflow grillig en mislukt om willekeurige redenen. Laten we eens kijken hoe je het automatisch opnieuw kunt laten uitvoeren om tijd te besparen.
We houden van GitHub Actions. Het is krachtig en biedt een royaal gratis abonnement.
Naarmate ons project groeit, hebben we meer en meer integratietests toegevoegd aan onze GitHub Actions workflow. Net als andere coole projecten voeren we onze tests uit voor elke pull request, push en release.
Echter, vanwege de aard van integratietests, mislukt onze workflow soms om willekeurige redenen. Het kan een netwerkprobleem zijn, een browser probleem of andere redenen die moeilijk te reproduceren zijn.
Wanneer de workflow mislukt, moeten we het handmatig opnieuw uitvoeren. Het is in het begin geen groot probleem, maar het is toch vervelend voor hoog-efficiënte ontwikkelaars zoals wij.
Op het moment van schrijven biedt GitHub Actions geen ingebouwde manier om een mislukte workflow automatisch opnieuw uit te voeren. Laten we het dus opsplitsen en kijken hoe we dit kunnen bereiken.
Wanneer een workflow NIET draait en is mislukt, kun je het handmatig opnieuw uitvoeren door op de knop "Opnieuw uitvoeren" te klikken. Er wordt een dropdownmenu geopend met de optie "Opnieuw uitvoeren van mislukte taken" om de succesvolle taken over te slaan.
Het idee is dus simpel:
Blijkbaar kunnen we dit niet doen in dezelfde workflow, omdat een workflow niets kan doen als het niet draait. Dus we hebben een andere workflow nodig om de status van de vorige workflow te monitoren en de actie voor opnieuw uitvoeren te activeren. Dit kan als volgt worden geïllustreerd:
Maak een nieuw workflow-bestand in je repository, bijvoorbeeld .github/workflows/rerun.yml:
Dankzij de GitHub CLI kunnen we eenvoudig de status van een workflow bekijken en het opnieuw uitvoeren met twee simpele commando's:
gh run watch om de status van een workflow te bekijken (documentatie hier).gh run rerun om een workflow opnieuw uit te voeren. De --failed vlag zal alleen de mislukte taken opnieuw uitvoeren (documentatie hier).Alles wat je hoeft te doen is de run_id van de mislukte workflow te geven, wat kan worden gedaan door de github.run_id context te gebruiken. Je kunt bijvoorbeeld de opnieuw uitvoeren workflow activeren door de volgende stap aan je oorspronkelijke workflow toe te voegen:
De if: failure() conditie zal de stap alleen activeren wanneer de job is mislukt. De fromJSON(github.run_attempt) < 3 conditie zal alleen de eerste 2 pogingen opnieuw uitvoeren. Je kunt het aantal aanpassen naar je behoeften.
Deze stap gebruikt het gh workflow run commando om de opnieuw uitvoeren workflow te activeren. Zie de documentatie voor meer details.
Als je de opnieuw uitvoeren workflow wilt uitvoeren vanuit de branch die is mislukt, in plaats van de standaard branch, kun je de volgende command gebruiken:
De github.head_ref context zal worden gebruikt als het een pull request is, anders wordt github.ref_name gebruikt.
Het idee van deze aanpak komt oorspronkelijk van deze GitHub-discussie opmerking.