130 votes

Comment configurer le hook post-commit de Git

Je suis nouveau sur Jenkins. Comment déclencher un build à distance à partir de Jenkins?
Quelqu'un peut dire comment configurer Git post-commit hook?

Mon exigence est à chaque fois que des modifications sont apportées dans le dépôt Git pour un projet particulier, il sera automatiquement commencer à Jenkins de construire pour ce projet.

Dans Jenkins déclencher construire la section I de déclenchement sélectionné construire à distance.
En .git annuaire, crochets répertoire est là que nous avons pour configurer post-validation de fichier.
Je suis confus comment déclencher un construire à partir de là (je sais que certaines partie nous devrions utiliser la commande curl).


curl cmbuild.aln.com/jenkins/view/project name/job/myproject/buildwithparameters?Branch=feat-con

J'ai placé cette commande dans mon serveur git crochets répertoire (post-commit hook).
Chaque fois que des changements se produisent dans le dépôt, il est en cours d'exécution automatiser construire.

Je veux vérifier dans l'ensemble de modifications que dans au moins un fichier java est-il la construction doit démarrer.
Supposons que les développeurs changé seulement les fichiers xml ou les fichiers de propriété de la construction ne doit pas démarrer.
Avec xml, supposons que l' .java fichiers est-il la construction doit démarrer.

168voto

VonC Points 414372

Comme mentionné dans "leScrutin doit mourir: le déclenchement de Jenkins construit à partir d'un git crochet", vous pouvez vous informer Jenkins d'un nouveau commit:

Avec la dernière Git plugin 1.1.14 (que je viens de version maintenant), vous pouvez désormais le faire plus >facilement, simplement en exécutant la commande suivante:

curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>

Cette analyse tous les emplois qui est configuré pour vérifier l'URL spécifiée, et s'ils sont configurés avec des sondages, il va immédiatement déclencher l'interrogation (et si qui constate un changement en vaut une construction, un build sera déclenché à son tour.)

Cela permet à un script de rester même lorsque les emplois d'aller et venir dans Jenkins.
Ou si vous avez plusieurs référentiels en vertu d'un référentiel unique de l'application hôte (comme Gitosis), vous pouvez partager un post-recevoir script hook avec tous les référentiels. Enfin, cette URL ne nécessite pas d'authentification de même pour les sécurisé Jenkins, parce que le serveur n'est pas directement utiliser ce que le client envoie. Il fonctionne d'interrogation pour vérifier qu'il y a un changement, avant qu'il ne commence effectivement l'accumulation.

Comme mentionné ici, assurez-vous d'utiliser la bonne adresse pour votre serveur Jenkins:

puisque nous sommes en cours d'exécution Jenkins comme autonome Serveur web sur le port 8080 l'URL doit avoir été sans l' /jenkins, comme ceci:

http://jenkins:8080/git/notifyCommit?url=git@gitserver:tools/common.git

Vous pouvez également utiliser un simple post-recevoir crochet en forme de "Pousser fondé construit à l'aide de Jenkins et GIT"

#!/bin/bash
/usr/bin/curl --user USERNAME:PASS -s \

http://jenkinsci/job/PROJECTNAME/build?token=1qaz2wsx

Configurer votre Jenkins travail pour être en mesure de "Déclencher construit à distance" et d'utiliser un jeton d'authentification (1qaz2wsx dans cet exemple).

Cependant, c'est un projet de scénario précis, et l'auteur mentionne un moyen de généraliser.
La première solution est plus facile, car il ne dépend pas de l'authentification ou un projet spécifique.


Je veux vérifier dans le changement de définir si au moins un fichier java est-il la construction doit démarrer.
Supposons que les développeurs changé seulement les fichiers XML ou les fichiers de propriétés, puis la construction ne doit pas démarrer.

Fondamentalement, vous pouvez créer un script peut:

  • mettre un "build" notes (voir git notes) sur le premier appel
  • sur les appels suivants, prenez la liste des commits entre HEAD de votre branche candidat pour la construction et la validation référencé par l' git notes 'construire' (git show refs/notes/build): git diff --name-only SHA_build HEAD.
  • votre script peut analyser cette liste et de décider s'il faut aller sur la construction.
  • dans tous les cas, créer/déplacer votre git notes 'build' HEAD.

18voto

Nav Points 3105

Espérons que cela aide: http://nrecursions.blogspot.in/2014/02/how-to-trigger-jenkins-build-on-git.html

C'est juste une question de l'utilisation d' curl pour déclencher un Jenkins travail à l'aide du git crochets fournis par git.
La commande

curl http://localhost:8080/job/someJob/build?delay=0sec

pouvez exécuter une Jenkins travail, où, someJob est le nom de l'Jenkins travail.

Recherche pour l' hooks le dossier dans votre cachés .git dossier. Renommer l' post-commit.sample fichier post-commit. L'ouvrir avec le bloc-notes, supprimer l' : Nothing ligne et coller la commande ci-dessus.

C'est tout. Chaque fois que vous validez, Git va déclencher le post-commit des commandes définies dans le fichier.

3voto

Zitrax Points 3443

Comme la réponse précédente donnait un exemple de ce à quoi le crochet complet pourrait ressembler, voici le code de mon crochet de travail après réception:

 #!/usr/bin/python

import sys
from subprocess import call

if __name__ == '__main__':
    for line in sys.stdin.xreadlines():
        old, new, ref = line.strip().split(' ')
        if ref == 'refs/heads/master':
            print "=============================================="
            print "Pushing to master. Triggering jenkins.        "
            print "=============================================="
            sys.stdout.flush()
            call(["curl", "-sS", "http://jenkinsserver/git/notifyCommit?url=ssh://user@gitserver/var/git/repo.git"])
 

Dans ce cas, je ne déclenche les travaux jenkins que lorsque vous souhaitez maîtriser et non d'autres branches.

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