Comment puis-je faire en sorte que Jenkins CI avec déclencheur Git soit activé sur les poussées?

J’essaie de configurer Jenkins-ci pour un projet utilisant GitHub. J’ai déjà configuré Jenkins avec les plugins appropriés. Je veux que Jenkins ne lance des scripts de compilation que lorsque quelqu’un du projet pousse à maîsortingser. Jusqu’à présent, j’ai été en mesure de le configurer pour qu’une génération soit déclenchée à tout moment, mais que cela soit trop large. Je l’ai fait avec des points de service après réception sur Git.

J’ai lu le wiki Jenkins et quelques tutoriels, mais ce détail particulier est manquant … est-ce que ça a quelque chose à voir avec les sondages? Ou devrait-on travailler du côté de Git, de sorte que Git ne déclenche Jenkins que lorsque master est modifié?

Comme déjà noté par gezzed dans son commentaire, il existe une bonne solution (décrite dans Polling must die: le déclenchement de Jenkins à partir d’un hook Git ):

  • Définissez le déclencheur de génération du travail Jenkins sur Poll SCM , mais ne spécifiez pas de planification.

  • Créer un déclencheur post-réception GitHub pour notifier l’URL

     http://yourserver/jenkins/git/notifyCommit?url=?token= 
  • Cela déclenchera toutes les générations qui interrogent le référentiel Git spécifié.

  • Cependant, l’interrogation vérifie réellement si quelque chose a été poussé vers la twig utilisée.

Cela fonctionne parfaitement.

A partir de la version 0.5, le plugin GitHub pour Jenkins peut déclencher une génération lorsqu’un changement est transféré à GitHub .

Au lieu de déclencher des builds à distance, changez votre configuration de projet Jenkins pour déclencher des builds par interrogation.

Jenkins peut interroger sur un interne fixe, ou par une URL. Ce dernier est ce que vous voulez ignorer des versions s’il n’y a pas de modifications pour cette twig. Les détails exacts sont dans la documentation . Essentiellement, il vous suffit de cocher l’option “Poll SCM”, de laisser la section de planification vide et de définir une URL distante pour qu’elle touche JENKINS_URL / job / name / polling.

Si vous avez un environnement Jenkins sécurisé différent de /build , l’URL /polling requirejs une authentification. Les instructions ici ont des détails. Par exemple, j’ai un hook GitHub Post-Receive qui va au username:apiToken@JENKIS_URL/job/name/polling d’ username:apiToken@JENKIS_URL/job/name/polling .

Pour GitLab , procédez comme suit:

  1. Accédez aux parameters de votre projet → Web hooks
  2. Entrez l’URL “Build Now” de votre projet Jenkins en tant qu’URL d’événement Push:

    http://server.com/jenkins/job/project_name/build?delay=0sec par exemple

  3. Cliquez sur Add Web Hook , puis test hook

Chaque fois que vous vous engagez dans le référentiel, le hook Web est déclenché et une génération est créée. Veillez à définir votre espace de travail Jenkins pour delete workspace before each build afin d’obtenir une nouvelle copie du nouveau code.

Non lié à Git, mais ci-dessous, je vais vous aider avec la configuration du travail Jenkins en détail avec Mercurial. Cela peut aider d’autres personnes ayant un problème similaire.

  1. Installez le plugin de déclencheur d’URL
  2. Accédez à la page de configuration du travail et sélectionnez l’option Poll SCM . Définissez la valeur sur * * * * *
  3. Vérifiez l’option: [URLTrigger] - Poll with a URL . Vous pouvez maintenant sélectionner des options telles que le changement de date de modification, le contenu de l’URL, etc.
  4. Dans les options, sélectionnez Modifier le contenu de l’URL, sélectionnez la première option – Monitor change of content
  5. Enregistrez les modifications.

Maintenant, déclenchez des modifications dans le référentiel Mercurial à l’aide de certaines vérifications de test.

Voir que le travail Jenkins s’exécute maintenant en détectant les modifications SCM. Lorsque la construction est exécutée en raison de changements Mercurial, vous verrez alors le texte Started by an SCM change . Sinon, l’utilisateur qui l’a démarré manuellement.

J’espère que cela aide: Comment déclencher une construction Jenkins sur commit Git

Il suffit d’utiliser curl pour déclencher un travail Jenkins à l’aide des hooks Git fournis par Git.

La commande curl http://localhost:8080/job/someJob/build?delay=0sec peut exécuter un travail Jenkins, où someJob est le nom du travail Jenkins.

Recherchez le dossier “hooks” dans votre dossier caché .git. Renommez le fichier “post-commit.sample” en “post-commit”. Ouvrez-le avec le Bloc-notes, supprimez la ligne “: Nothing” et collez-y la commande ci-dessus.

C’est tout. Chaque fois que vous faites un commit, Git déclenche les commandes post-commit définies dans le fichier.

Vous devez spécifier la twig. Par défaut, il écoute n’importe quoi. Voir l’article sur le blog Hudson: plugins Git et Maven .

Intégration continue avec Jenkins, après que le code a été poussé dans le référentiel depuis la commande GIT / GUI:

  1. Créez un emploi dans Jenkins avec uniquement le nom du travail et sélectionnez le type du projet freestyle. Cliquez sur OK . La page suivante n’ajoute rien – cliquez simplement sur Enregistrer .
  2. Accédez au référentiel Git local où vous avez le code source et accédez au dossier .git/hooks .
  3. Le dossier des hooks contient les quelques fichiers. Vérifiez le “post-commit”. S’il n’est pas présent, créez un fichier “post-commit” sans extension de fichier:

     C:\work\test\\.git\hooks\post-commit 
  4. Editez le fichier “post-commit” avec la commande ci-dessous. Assurez-vous qu’il est présent dans votre dossier de hooks de code source local.

     curl -u userName:apiToken -X POST http://localhost:8080/jenkins/job/jobName/build?token=apiToken 

    Exemple:

     curl -u admin:f1c55b3a07bb2b69b9dd549e96898384 -X POST http://localhost:8080/jenkins/job/Gitcommittest/build?token=f1c55b3a07bb2b69b9dd549e96898384 

    5.

    userName : nom d’utilisateur Jenkins

    jobName : nom du travail de la construction

    apiToken : Pour obtenir votre jeton API, accédez à votre page utilisateur Jenkins (en haut à droite de l’interface). Il est disponible dans le menu “Configurer” sur la gauche de la page: “Show token API”

  5. Apportez des modifications à votre code source et validez le code dans le référentiel.

  6. Votre travail, http://localhost:8080/jenkins/job/Gitcommittest/ , devrait être construit.

Le plug-in générique Webhook Trigger peut être configuré avec des filtres pour y parvenir.

Lorsque configuré avec

  • Une variable nommée ref et expression $.ref .
  • Un filtre avec text $ref et une expression de filtre comme ^refs/heads/master$ .

Alors ce travail se déclenchera pour chaque poussée à master . Pas de sondage

Vous souhaitez probablement plus de valeurs du webhook pour effectuer la construction. Ajoutez simplement d’autres variables, avec JSONPath, pour choisir ce dont vous avez besoin.

Il y a quelques cas d’utilisation ici: https://github.com/jenkinsci/generic-webhook-sortinggger-plugin/tree/master/src/test/resources/org/jenkinsci/plugins/gwt/bdd

Utilisez le plug-in de générateur de requête d’extraction: https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin

C’est vraiment simple. Vous pouvez ensuite configurer les webhooks GitHub pour déclencher des builds.

Dans mon organisation actuelle, nous ne le faisons pas dans master mais le faisons à la fois sur develop et release / twigs (nous utilisons Git Flow), afin de générer des builds de snapshots.

Comme nous utilisons un pipeline multi-twigs, nous le faisons dans le fichier Jenkins avec la syntaxe when {}

 stage { when { expression { branch = develop // on my phone, don't have exact syntax } } } 

Ceci est détaillé dans cet article de blog: https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/#longer-pipeline