208 votes

Comment faire pour que Jenkins CI avec Git se déclenche sur les poussées vers master ?

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 exécute la construction scripts uniquement lorsque quelqu'un sur le projet pousse vers master. Jusqu'à présent, j'ai pu le configurer pour qu'une construction soit déclenchée chaque fois que quelqu'un pousse vers n'importe où, mais c'est trop large. J'ai fait cela avec des hooks de service post-receive sur Git.

J'ai lu le wiki de Jenkins, et quelques tutoriels, mais ce détail particulier est absent... Est-ce quelque chose à faire avec le sondage peut-être ? Ou faut-il travailler du côté de Git, pour que Git ne déclenche Jenkins que lorsque master est modifié ?

3 votes

L'auteur original de Jenkins, Kohsuke Kawaguchi, décrit comment faire de la notification push à partir du dépôt en utilisant le plugin Git plugin 1.1.14. Voir kohsuke.org/2011/12/01/…

192voto

olenz Points 341

Comme l'a déjà fait remarquer gazéifié dans son commentaire, en attendant il existe une bonne solution (décrite dans Polling must die : déclencher des constructions Jenkins à partir d'un hook Git ) :

  • Définir le déclencheur de construction de la tâche Jenkins à Sondage SCM mais ne no spécifier un calendrier.

  • Créer un déclencheur GitHub post-receive pour notifier l'URL

    http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>?token=<get token from git to build remotely>
  • Cela déclenchera toutes les constructions qui interrogent le dépôt Git spécifié.

  • Cependant, le polling vérifie réellement si quelque chose a été poussé vers la branche utilisée.

Il fonctionne parfaitement.

1 votes

Cela a bien fonctionné pour moi aussi, vous pouvez utiliser la même approche avec une installation locale de Gitorious : cweiske.de/tagebuch/gitorious-post-receive-hook-2.htm

4 votes

Fonctionne également avec le crochet POST de Bitbucket (pas Jenkins). Pour spécifier les références d'authentification, vous pouvez utiliser user:password@my.ci.server/git/notifyCommit?url= ... comme URL.

0 votes

Peut-on le configurer de façon à ce que Jenkins ne construise que les librairies/projets affectés par la dernière poussée vers le dépôt ? Sans recompiler toute la branche ?

34voto

The Doctor What Points 4454

Depuis la version 0.5, le plugin GitHub pour Jenkins peut déclencher une construction lorsqu'un changement est poussé vers GitHub .

23 votes

@asveikau -- La question initiale portait sur github.

0 votes

Ce n'est pas une bonne solution car cela déclenche la construction indépendamment de la branche qui a été poussée.

0 votes

En fait, il semble qu'il obéisse au spécificateur de branche dans les paramètres du plugin git si vous activez "Poll SCM" (aucune planification nécessaire).

9voto

Wei Wang Points 41

Au lieu de déclencher construit à distance, modifiez la configuration de votre projet Jenkins pour déclencher les constructions par sondage.

Jenkins peut interroger sur la base d'un interne fixe, ou par une URL. Cette dernière est celle que vous voulez pour sauter les constructions s'il n'y a pas de changements pour cette branche. Les détails exacts sont dans la documentation . Pour l'essentiel, il suffit de cocher l'option "Poll SCM", de laisser la section "schedule" vide, et de définir une URL distante pour atteindre JENKINS_URL/job/name/polling.

Si vous avez un environnement Jenkins sécurisé, il y a une différence entre /build le /polling L'URL nécessite une authentification. Les instructions aquí ont des détails. Par exemple, j'ai un crochet GitHub Post-Receive qui va à username:apiToken@JENKIS_URL/job/name/polling .

4voto

Krishnam Points 31

Ce n'est pas lié à Git, mais ci-dessous je vais vous aider à configurer la tâche Jenkins en détail avec Mercurial. Cela peut aider d'autres personnes ayant un problème similaire.

  1. Installer le plugin URL Trigger
  2. Allez à la page de configuration des travaux et sélectionnez Poll SCM option. Définissez la valeur sur * * * * *
  3. Vérifiez l'option : [URLTrigger] - Poll with a URL . Vous pouvez maintenant sélectionner certaines options comme le changement de date de modification, le contenu de l'URL, etc.
  4. Dans les options, sélectionnez Modification du contenu de l'URL, puis sélectionnez la première option. Monitor change of content
  5. Sauvegardez les modifications.

Maintenant, déclenchez des changements dans le dépôt Mercurial par des check-ins de test.

Voyez que le travail Jenkins fonctionne maintenant en détectant les changements SCM. Lorsque la construction est exécutée en raison des changements Mercurial, alors, vous verrez du texte Started by an SCM change . Sinon, l'utilisateur qui l'a lancé manuellement.

3voto

Adam Dymitruk Points 34999

Vous devez spécifier la branche. Par défaut, il écoute n'importe quoi. Voir l'article de blog Hudson : Plugins Git et Maven .

0 votes

J'ai récemment configuré Jenkins au travail pour extraire les changements de git sur une branche spécifique. Cela fonctionne bien. +1

0 votes

J'ai également défini ce paramètre. Ce que je remarque, c'est que Jenkins est notifié de chaque poussée vers github, et y réagit, mais ne lance les étapes de construction que si la branche master a changé. Ainsi, nous obtenons une tonne de rapports de construction fallacieux qui disent "Pas de changements". Observez-vous également ce comportement ?

0 votes

La question originale est de savoir comment résoudre le déclencheur large et inutile (se déclenchant lorsque quelqu'un pousse sur n'importe quelle branche) configuré dans votre réponse. Si vous avez 5 jobs jenkins avec la même configuration sauf que le premier job écoute la branche master, le second la branche devel, le troisième la branche FeatureX et ainsi de suite, lorsque vous ne poussez que sur la branche FeatureX tous les jobs jenkins seront déclenchés ce qui conduit à une surcharge de travail avec des builds très lents.

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