9 votes

Déclencher la construction Jenkins lorsque la demande de tirage est fusionnée dans Github

Cela devrait être une configuration simple et prête à l'emploi dans Jenkins, mais je n'ai rien trouvé de clair sur internet. Tout ce que je veux faire, c'est déclencher une construction UNIQUEMENT lorsque une pull request est fusionnée dans notre dépôt Github.

Pour commencer, Github agrège presque toutes les activités autour de la pull request en un seul webhook (contrairement à Bitbucket qui permet de différencier les actions).

entrer la description de l'image ici

Côté Jenkins, j'ai vu des publications pointer vers le Plugin Webhook Générique qui vous permet d'ingérer le json du webhook et de créer des variables, cependant d'ici il semble que celles-ci doivent être utilisées dans un script pour déclencher ou ne pas déclencher une construction.

Plugin Github Pull Request Build est un autre plugin populaire, mais encore une fois, rien n'indique explicitement "déclencher cette construction uniquement lorsque une PR est fusionnée" ou semble même donner la possibilité de rechercher une valeur spécifique dans le json du webhook.

Sauf s'il existe d'autres plugins que je n'ai pas trouvés, la meilleure option (c'est-à-dire la moins de configuration pour simplement lancer la construction) consiste à configurer le déclencheur de webhook GitHub pour un sondage GITSCM dans Jenkins et du côté Github, envoyer le webhook uniquement sur les événements de poussée... cependant, ce n'est pas le comportement exact que nous recherchons.

entrer la description de l'image ici

Actuellement, tout cela se fait via l'interface utilisateur, et cela fait un moment que je n'ai pas utilisé Jenkins, donc peut-être que l'infrastructure de pipeline déclarative a dépassé l'interface utilisateur, mais il semble que cela devrait être beaucoup plus intuitif. Quelqu'un peut-il expliquer la mise en œuvre la plus simple qu'il a trouvée, en utilisant Jenkins et Github, pour déclencher une construction UNIQUEMENT lorsque une pull request est fusionnée dans une branche spécifique?

6voto

VonC Points 414372

Plus besoin de webhooks désormais, puisque vous avez maintenant GitHub Actions (en supposant que vous utilisez github.com, bien que les Actions seront disponibles avec GHE, GitHub Enterprise, en version bêta, à partir de Sept. 2020).

Comme expliqué sur ce fil de discussion, vous pouvez déclencher, du côté de GitHub, un job lorsque une pull request est fusionnée sur master:

sur:
  pull_request:
    branches:
      - master
    types: [closed]

jobs:
  :
    if: github.event.pull_request.merged == true
    steps: // le reste du code

Et ce job peut ensuite utiliser une Action GitHub comme Déclencher un travail Jenkins pour les actions GitHub, qui appellera votre Jenkins et déclenchera un ou plusieurs travaux Jenkins.

jobs:

  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
    - name: déclencher un seul travail
      utilise: appleboy/jenkins-action@master
      with:
        url: "http://example.com"
        user: "example"
        token: ${{ secrets.TOKEN }}
        job: "foobar"

Après discussion avec l'OP et en suivant le tutoriel sur les Actions GitHub, je confirme que:

  • Jenkins n'a pas besoin d'être lancé avec Docker, il doit simplement être accessible depuis GitHub via son URL public;
  • La "déclenchement de construction à distance" doit être activée sur Jenkins;
  • un jeton doit être généré pour l'utilisateur Jenkins avec le droit de lancer le travail Jenkins;
  • Un fichier triggerJenkinsBuild.yml (ou un autre nom de votre choix) doit être créé dans le dossier .github/workflows de votre dépôt GitHub, avec les deux sections YAML mentionnées ci-dessus;
  • Le champ "url:" est simplement l'URL de base de l'instance Jenkins, sans chemin supplémentaire.

0voto

Shaheer Akram Points 23

Vous pouvez configurer le plugin générique de déclenchement de webhook pour analyser le JSON de la charge utile provenant de Github.
assurez-vous d'avoir coché les Pull requests dans la configuration du webhook Github

entrer la description de l'image ici

maintenant vous pouvez rechercher la clé fusionnée dans le JSON du webhook, plus de détails donnés à cette URL : https://developer.github.com/webhooks/event-payloads/#pull_request

d'abord vous devez vérifier la clé de l'action, si elle est fermée, alors vérifiez la clé fusionnée. selon la documentation officielle Si l'action est fermée et que la clé fusionnée est fausse, la pull request a été fermée avec des commits non fusionnés. Si l'action est fermée et que la clé fusionnée est vraie, la pull request a été fusionnée.

maintenant configurez le webhook générique pour lire les clés d'action et de fusion à partir de la charge utile dans votre pipeline Jenkins vous pouvez suivre cet exemple: https://github.com/jenkinsci/generic-webhook-trigger-plugin/blob/master/sandbox/multibranch.jenkinsfile

dans votre pipeline, vous pouvez utiliser ces clés pour vérifier si vous voulez déclencher la construction ou non.

pour déclencher la construction sur la fusion d'une branche spécifique, vous pouvez utiliser des variables d'environnement dans le pipeline Jenkins, la env.BRANCH_NAME vous indiquera de quelle branche vous avez obtenu le commit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X