Comment puis-je faire Jenkins CI avec Git trigger sur les poussées à maîtriser?

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 des scripts de construction Uniquement chaque fois que quelqu'un sur le projet pousse à maîtriser. Jusqu'à présent, j'ai été en mesure de le configurer pour qu'une construction soit déclenchée chaque fois que quelqu'un pousse n'importe où, mais c'est trop large. Je l'ai fait avec des crochets de service post-réception sur Git.

J'ai lu le Wiki Jenkins, et quelques tutoriels, mais ce détail particulier est manquant... est-ce quelque chose à voir avec le scrutin peut-être? Ou le travail devrait-il être fait du côté Git, de sorte que Git ne déclenche Jenkins que lorsque master est modifié?

182
demandé sur Peter Mortensen 2011-04-26 03:19:45

11 réponses

Comme déjà noté par gezzed dans son commentaire, en attendant il y a une bonne solution (décrite dans L'interrogation doit mourir: déclencher les builds 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 une planification.

  • Créez 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 builds qui interrogent le Git spécifié référentiel.

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

Cela fonctionne parfaitement.

176
répondu olenz 2018-07-18 21:36:07

À partir de la version 0.5, Le plugin Github pour Jenkins peut déclencher une build lorsqu'une modification est poussée vers GitHub .

31
répondu docwhat 2018-07-18 21:36:58

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

Jenkins peut interroger basé sur un interne fixe, ou par une URL. Ce dernier est ce que vous voulez ignorer les builds s'il n'y a pas de changements pour cette branche. Les détails exacts sont dans la documentation. Essentiellement, il vous suffit de cocher l'option "sondage SCM", de laisser la section de planification vide et de définir une URL distante à frapper JENKINS_URL/travail/nom de/des bureaux de vote.

One gotcha si vous avez un environnement Jenkins sécurisé est différent de /build, l'URL /polling nécessite une authentification. Les instructions ici ont des détails. Par exemple, j'ai un crochet de Post-réception GitHub allant à username:apiToken@JENKIS_URL/job/name/polling.

9
répondu Wei Wang 2018-07-18 21:38:38

Pour GitLab , procédez comme suit:

  1. accédez aux paramètres 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 sur test hook

Ensuite, chaque fois que vous validez dans le référentiel, le hook web est déclenché et une build est créée. Assurez-vous de définir votre espace de travail Jenkins sur delete workspace before each build afin d'obtenir une nouvelle copie du nouveau code.

7
répondu etusm 2018-07-18 21:42:14

Pas 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 URL Trigger
  2. accédez à la page de configuration du travail et sélectionnez l'option Poll SCM. Définissez la valeur sur * * * * *
  3. Cochez l'option: [URLTrigger] - Poll with a URL. Maintenant, vous pouvez 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, sélectionnez la première option – Monitor change of content
  5. enregistrez les modifications.

Maintenant, déclenchez une modification du référentiel Mercurial par des vérifications de test.

Voyez que le travail Jenkins s'exécute maintenant en détectant les modifications SCM. Lorsque la construction est exécutée en raison de modifications Mercuriales, vous verrez text Started by an SCM change. Sinon, l'utilisateur qui a démarré manuellement il.

4
répondu Krishnam 2018-07-18 21:39:58

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

Il s'agit simplement d'utiliser curl pour déclencher un travail Jenkins en utilisant les 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 caché .dossier git. Renommez le " post-commit.exemple "fichier à" post-commit". Ouvrez-le avec le bloc-notes, supprimez la ligne": Nothing " et collez la commande ci-dessus en elle.

C'est ça. Chaque fois que vous effectuez une validation, Git déclenchera les commandes post-validation définies dans le fichier.

3
répondu Nav 2018-07-18 21:41:12

Vous devez spécifier la branche. Par défaut, il écoute quoi que ce soit. Voir le billet de blog Hudson: plugins Git et Maven.

3
répondu Adam Dymitruk 2018-07-21 16:36:22

Intégration continue avec Jenkins, après que le code soit poussé vers le référentiel à partir de la commande Git / GUI:

  1. créez un travail 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 Save .
  2. allez dans votre dépôt Git local où vous avez le code source et accédez au dossier .git/hooks.
  3. Le dossier hooks contient les quelques fichiers. Vérifiez le "post-commit". Si pas présent, créez un fichier "post-commit" sans extension de fichier:

    C:\work\test\\.git\hooks\post-commit
    
  4. Modifiez le fichier" post-commit " avec la commande ci-dessous. Assurez-vous qu'il est présent dans votre code source crochets dossier.

    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 dans l'interface). Il est disponible dans le menu" Configurer " à gauche de la page: "Afficher le jeton 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/, devraient être de construction.

2
répondu Venkata Naresh Babu 2018-07-18 21:45:23

Générique Webhook Déclencher Plugin peut être configuré avec des filtres pour atteindre cet objectif.

Lorsqu'il est configuré avec

  • Une variable nommée ref et l'expression $.ref.
  • Un filtre avec du texte $ref et l'expression de filtre comme ^refs/heads/master$.

Alors ce travail se déclenchera pour chaque poussée à master. Aucune interrogation.

Vous voulez probablement plus de valeurs du webhook pour effectuer réellement la construction. Ajoutez simplement plus de variables, avec JSONPath, pour choisir ce que vous besoin.

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

1
répondu Tomas Bjerre 2018-09-04 13:54:48

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

Comme nous utilisons un pipeline multi-branches, nous le faisons dans le fichier Jenkinsfile avec la syntaxe when {} ...

stage {
    when { 
        expression { 
            branch 'develop'
        }
    }
}

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

1
répondu jesses.co.tt 2018-09-06 15:26:33

Utiliser la demande builder plugin: https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+demande+constructeur+plugin

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

0
répondu richardpringle 2017-05-31 19:50:49