Comment déclencher des actions GitHub à distance à l’aide de webhooks
GitHub Actions est un service CI/CD qui peut exécuter des builds et des tests sur la base de code de votre projet. Habituellement, les actions sont déclenchées automatiquement sur les nouveaux commits, mais elles peuvent également être lancées à distance à l’aide de notifications Webhook.
Pourquoi utiliser les Webhooks ?
Les générations d’actions sont déclenchées en fonction d’événements dans votre référentiel. En règle générale, cela signifie exécuter des builds et des tests chaque fois qu’un nouveau commit, une nouvelle version taguée ou une demande d’extraction est faite. Comme c’est la principale façon dont votre code changera, cela couvre la plupart des cas.
Cependant, si vous comptez sur d’autres versions de logiciels en tant que dépendances, il est assez courant d’exiger des versions régulières même si le code ne change pas. Étant donné que GitHub ne sait pas quand vos dépendances sont mises à jour, vous devrez pousser manuellement une nouvelle version taguée ou redémarrer la version précédente pour reconstruire avec la dépendance mise à jour.
Les webhooks sont un moyen de gérer cela automatiquement en demandant à une application externe de parler à GitHub pour que vous déclenchiez une nouvelle génération. Les webhooks peuvent être facilement envoyés par n’importe quelle application capable de faire des requêtes HTTP, ce qui inclut n’importe quel langage de programmation mais aussi des outils de ligne de commande comme curl
.
Un autre cas d’utilisation courant est la génération de sites statiques. Des cadres comme Gatsby exigent que le site soit reconstruit chaque fois que le contenu change. Cela se fait souvent manuellement, mais peut être automatisé par des services de gestion de contenu à l’aide de webhooks.
Vous voudrez vérifier pour vous assurer que ce que vous faites ne peut pas être accompli avec les déclencheurs GitHub Actions existants. Il existe une quantité surprenante de déclencheurs intégrés que vous pouvez lire sur le wiki GitHub. Par exemple, vous pouvez configurer un calendrier pour exécuter des builds basés sur la syntaxe cron, ce qui peut couvrir vos besoins si vous avez besoin de builds réguliers à un moment précis.
Configuration d’un déclencheur Webhook pour les actions Github
Tout d’abord, vous devez vous assurer que votre flux de travail GitHub Actions est correctement configuré et fonctionne correctement sans le webhook. Cela dépendra entièrement de votre base de code, mais GitHub propose de nombreux modèles prédéfinis, et vous pouvez lire notre guide sur la configuration d’un flux de travail pour en savoir plus.
Le déclencheur que nous utiliserons pour exécuter des actions à partir de webhooks est repository_dispatch
qui est utilisé pour les webhooks externes.
Tout d’abord, vous voudrez ajouter le déclencheur à la section « On » de votre fichier de workflow. Cela ne doit pas nécessairement remplacer les autres déclencheurs, vous pouvez donc toujours exécuter ce flux de travail sur les validations et les webhooks.
Le repository_dispatch
trigger peut prendre un paramètre de type d’événement facultatif, qui peut être utilisé pour filtrer entre différents webhooks si vous souhaitez qu’un seul référentiel accepte plusieurs webhooks.
C’est tout ce qui est requis du côté de GitHub, et maintenant nous pouvons envoyer le webhook. Le format de l’URL est le suivant et n’accepte que les requêtes POST :
https://api.github.com/repos/{username}/{repo}/dispatches
Une chose que vous devrez cependant définir est l’en-tête d’autorisation. C’est ennuyeux, mais tout à fait logique – sinon, n’importe qui pourrait envoyer des notifications de webhook à votre dépôt.
"Accept": "application/vnd.github+json" "Authorization": "token {personal_access_token}"
Enfin, vous devrez définir le event_type
avec un corps JSON sur la requête :
{ "event_type": "dependency_update" }
Vous pouvez générer un jeton d’accès personnel à partir de vos paramètres personnels ou d’organisation. Dirigez-vous vers les paramètres, cliquez sur « Paramètres du développeur » et générez un nouveau jeton. Ce jeton aura besoin d’une autorisation pour accéder au référentiel et à ses actions.
Une fois que vous avez le jeton, vous pouvez soumettre des webhooks autorisés. Il est utile d’utiliser un outil de débogage d’API tel que Postman ou curl pour tester s’il fonctionne ; si le webhook aboutit, vous obtiendrez une réponse 204 No Content et vous verrez le flux de travail s’exécuter sous l’onglet Actions, avec le type d’événement utilisé comme titre.
Une fois que le webhook fonctionne, vous devrez configurer votre application externe pour l’utiliser et rendre votre flux de travail entièrement connecté.