Conseils et astuces pour déboguer GitHub Actions
Un workflow qui fonctionnait hier échoue maintenant avec une erreur cryptique. Vous n’avez rien modifié. Les logs affichent un mur d’étapes réduites, et quelque part là-dedans se cache le véritable problème. Ce scénario frustre tous les ingénieurs qui maintiennent des pipelines CI/CD.
Le débogage efficace de GitHub Actions nécessite de connaître les outils existants et quand les utiliser. Ce guide couvre les techniques stables et pérennes qui vous aident à diagnostiquer rapidement les échecs de workflow—sans perdre de temps sur des approches qui ne fonctionneront pas.
Points clés à retenir
- Activez la journalisation de débogage avec les secrets
ACTIONS_STEP_DEBUGetACTIONS_RUNNER_DEBUGpour une meilleure visibilité des échecs de workflow - Ajoutez des étapes de diagnostic pour afficher les détails de l’environnement et utilisez
continue-on-error: truetemporairement pour isoler les étapes instables - Validez les workflows localement avec actionlint et nektos/act avant de pousser pour détecter les erreurs en amont
- Épinglez les versions d’actions à des tags ou SHA spécifiques pour éviter les ruptures inattendues dues aux changements en amont
Activer la journalisation de débogage pour une meilleure visibilité
Lorsque les logs standard de GitHub Actions ne révèlent pas suffisamment de détails, activez la journalisation de débogage. Deux secrets de dépôt contrôlent ce comportement :
- ACTIONS_STEP_DEBUG : Définir à
truepour voir la sortie détaillée de chaque étape - ACTIONS_RUNNER_DEBUG : Définir à
truepour obtenir des informations de diagnostic au niveau du runner
Vous pouvez également activer le mode débogage sans modifier les secrets. Lors de la réexécution d’un workflow échoué, sélectionnez « Re-run jobs » et cochez l’option « Enable debug logging ». Cela fournit des traces détaillées pour cette exécution spécifique sans affecter les exécutions futures.
La visionneuse de logs de GitHub prend en charge le streaming en direct et l’affichage étendu des logs récents, facilitant le suivi des jobs de longue durée en temps réel. Utilisez la fonction de recherche dans les étapes développées pour localiser des erreurs spécifiques plutôt que de tout faire défiler.
Ajouter des étapes de diagnostic à votre workflow
Parfois, vous avez besoin d’informations de débogage personnalisées. Ajoutez des étapes qui affichent les détails de l’environnement avant les opérations critiques :
- name: Debug environment
run: |
echo "Node version: $(node --version)"
echo "Working directory: $(pwd)"
echo "Event: ${{ github.event_name }}"
env | sort
Pour les étapes qui échouent de manière imprévisible, utilisez continue-on-error: true temporairement. Cela permet aux étapes suivantes de s’exécuter, révélant si l’échec se propage ou reste isolé :
- name: Potentially flaky step
id: tests
continue-on-error: true
run: npm test
- name: Capture state after tests
if: always()
run: echo "Tests completed with status ${{ steps.tests.outcome }}"
Supprimez continue-on-error une fois que vous avez identifié la cause racine.
Valider les workflows localement avant de pousser
Pousser des commits juste pour tester la syntaxe des workflows fait perdre du temps et encombre votre historique. Utilisez actionlint pour détecter les erreurs YAML et les erreurs d’expression avant qu’elles n’atteignent GitHub :
actionlint .github/workflows/
Pour des tests locaux plus complets, nektos/act exécute les workflows dans des conteneurs Docker qui se rapprochent de l’environnement runner de GitHub. Il ne reproduira pas tout—la rétention des artefacts et les versions exactes des logiciels diffèrent—mais il valide l’ordre d’exécution des étapes et détecte les problèmes de configuration évidents.
act -P ubuntu-latest=catthehacker/ubuntu:act-latest
Ces deux outils fournissent des boucles de rétroaction rapides qui réduisent considérablement les cycles de dépannage des workflows.
Discover how at OpenReplay.com.
Comprendre le comportement des artefacts
Les artefacts dans GitHub Actions sont limités au scope du job. Plusieurs jobs ne peuvent pas uploader vers le même nom d’artefact sous le système v4—les tentatives entreront en conflit plutôt que de fusionner. Donnez toujours à chaque job un nom d’artefact unique, en particulier dans les builds matriciels ou parallèles, pour éviter les échecs d’upload et garantir une récupération prévisible.
Utiliser des workflows réutilisables pour réduire l’instabilité
La logique de workflow dupliquée entre les dépôts introduit des incohérences. Lorsque les mêmes étapes existent à plusieurs endroits, le débogage devient plus difficile car les corrections doivent se propager partout.
Les workflows réutilisables centralisent les patterns communs. Lorsque vous corrigez un bug ou améliorez la fiabilité à un seul endroit, tous les workflows appelants en bénéficient. Cette approche facilite également l’application cohérente du débogage CI/CD dans toute votre organisation.
Épingler les versions d’actions et éviter les actions obsolètes
Référencez les actions par SHA ou tags de version spécifiques plutôt que @main ou @master. Les références non épinglées peuvent casser les workflows lorsque des changements en amont se produisent :
# À privilégier
uses: actions/checkout@v4
# À éviter
uses: actions/checkout@main
De nombreuses anciennes actions d’aide au débogage utilisent des versions obsolètes de Node.js. GitHub émet des avertissements à ce sujet dans les logs de workflow. Remplacez-les par des alternatives maintenues pour éviter des échecs inattendus lorsque GitHub supprimera finalement le support des runtimes legacy.
Protéger les secrets dans la sortie de débogage
La journalisation de débogage expose plus d’informations, ce qui crée un risque. N’affichez jamais les secrets directement, même dans les étapes de débogage. GitHub masque les secrets connus, mais les valeurs dérivées ou les correspondances partielles peuvent fuiter. Examinez la sortie de débogage avant de partager les logs publiquement ou dans les rapports de problèmes.
Conclusion
Le dépannage de workflow devient gérable lorsque vous connaissez les bonnes techniques. Activez la journalisation de débogage pour la visibilité, ajoutez des étapes de diagnostic de manière stratégique, validez localement avec actionlint ou act, et maintenez la cohérence grâce aux workflows réutilisables. Ces bonnes pratiques GitHub Actions s’appliquent quelle que soit l’évolution de la plateforme—ce sont des fondamentaux qui rendent le débogage CI/CD plus rapide et moins frustrant.
FAQ
Les échecs aléatoires proviennent souvent de changements dans les dépendances externes, comme des versions d'actions non épinglées qui se mettent à jour, des problèmes de registre de packages ou des limitations de débit. Les timeouts réseau et les contraintes de ressources sur les runners partagés peuvent également causer des échecs intermittents. Activez la journalisation de débogage et vérifiez si l'échec est corrélé à des moments spécifiques ou à la disponibilité de services externes.
Utilisez le contexte steps avec l'attribut id de l'étape. Tout d'abord, assignez un id à votre étape, puis référencez ses sorties en utilisant la syntaxe steps.step_id.outputs.output_name. Pour le résultat d'une étape avec continue-on-error, utilisez steps.step_id.outcome qui retourne success, failure, cancelled ou skipped.
Oui. Utilisez actionlint pour valider la syntaxe YAML et les expressions localement. Pour des tests plus approfondis, nektos/act exécute les workflows dans des conteneurs Docker qui simulent l'environnement runner de GitHub. Bien qu'act ne puisse pas reproduire toutes les fonctionnalités de GitHub, il détecte la plupart des erreurs de configuration et valide l'ordre d'exécution des étapes avant que vous ne poussiez.
ACTIONS_STEP_DEBUG active la sortie détaillée pour les étapes individuelles du workflow, affichant des informations détaillées sur l'exécution de chaque action. ACTIONS_RUNNER_DEBUG fournit des informations de diagnostic de plus bas niveau sur le runner lui-même, y compris la configuration de l'environnement et les opérations internes. Pour la plupart des scénarios de débogage, ACTIONS_STEP_DEBUG fournit suffisamment de détails.
Understand every bug
Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.