Relancer automatiquement votre workflow GitHub après un échec
Parfois, votre workflow GitHub Actions peut être capricieux et échouer pour des raisons aléatoires. Voyons comment vous pouvez le relancer automatiquement pour vous faire gagner du temps.
Parfois, votre workflow GitHub Actions peut être capricieux et échouer pour des raisons aléatoires. Voyons comment vous pouvez le relancer automatiquement pour vous faire gagner du temps.
Nous aimons GitHub Actions. Il est puissant et offre une généreuse gratuité.
Au fur et à mesure que notre projet grandit, nous avons ajouté de plus en plus de tests d'intégration à exécuter dans notre workflow GitHub Actions. Comme d'autres projets cool, nous exécutons nos tests pour chaque pull request, push, et release.
Cependant, en raison de la nature des tests d'intégration, notre workflow échoue parfois pour des raisons aléatoires. Cela pourrait être un problème de réseau, un pépin de navigateur, ou d'autres raisons difficiles à reproduire.
Lorsque le workflow échoue, nous devons le relancer manuellement. Ce n'est pas un gros problème au début, mais c'est quand même agaçant pour des développeurs à haute efficacité comme nous.
Au moment où nous écrivons ceci, GitHub Actions ne fournit pas de manière intégrée pour relancer automatiquement un workflow échoué. Décortiquons cela pour voir comment nous pouvons y parvenir.
Lorsque qu'un workflow N'EST PAS en cours d'exécution et qu'il a échoué, vous pouvez le relancer manuellement en cliquant sur le bouton "Re-run jobs". Un menu déroulant s'ouvre, offrant une belle option "Re-run failed jobs" pour ignorer les jobs réussis.
Ainsi, l'idée est simple :
Évidemment, nous ne pouvons pas faire cela dans le même workflow, car un workflow ne peut rien faire lorsqu'il n'est pas en cours d'exécution. Nous avons donc besoin d'un autre workflow pour surveiller l'état du workflow précédent et déclencher l'action de relance. Cela peut être illustré comme suit :
Créez un nouveau fichier de workflow dans votre dépôt, par exemple, .github/workflows/rerun.yml :
Grâce à GitHub CLI, nous pouvons facilement surveiller l'état d'un workflow et le relancer avec deux simples commandes :
gh run watch pour surveiller l'état d'un workflow (docs ici).gh run rerun pour relancer un workflow. L'option --failed ne relancera que les jobs échoués (docs ici).Tout ce que vous avez à faire est de fournir le run_id du workflow échoué, ce qui peut être fait en utilisant le contexte github.run_id. Par exemple, vous pouvez déclencher le workflow de relance en ajoutant l'étape suivante à votre workflow original :
La condition if: failure() ne déclenchera l'étape que lorsque le job a échoué. La condition fromJSON(github.run_attempt) < 3 ne relancera qu'aux deux premières tentatives. Vous pouvez ajuster le nombre selon vos besoins.
Cette étape utilise la commande gh workflow run pour déclencher le workflow de relance. Voir la documentation pour plus de détails.
Si vous souhaitez relancer le workflow depuis la branche qui a échoué, au lieu de la branche principale par défaut, vous pouvez utiliser la commande suivante :
Le contexte github.head_ref sera utilisé s'il s'agit d'une pull request, sinon, github.ref_name sera utilisé.
L'idée de cette approche provient à l'origine de ce commentaire de discussion GitHub.