Comme mentionné dans "L' interrogation doit mourir: déclencher les builds Jenkins à partir d'un hook git ", vous pouvez notifier Jenkins d'un nouveau commit:
Avec le dernier plugin Git 1.1.14 (que je viens de publier maintenant), vous pouvez maintenant le faire plus> facilement en exécutant simplement la commande suivante:
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>
Cela analysera tous les travaux configurés pour extraire l'URL spécifiée, et s'ils sont également configurés avec l'interrogation, cela déclenchera immédiatement l'interrogation (et si cela trouve un changement qui vaut la peine d'être construit, une compilation sera déclenchée à son tour. )
Cela permet à un script de rester le même lorsque les tâches vont et viennent dans Jenkins.
Ou si vous avez plusieurs référentiels sous une seule application hôte de référentiel (telle que Gitosis), vous pouvez partager un seul script hook post-réception avec tous les référentiels. Enfin, cette URL ne nécessite pas d'authentification, même pour Jenkins sécurisé, car le serveur n'utilise directement rien que le client envoie. Il exécute une interrogation pour vérifier qu'il y a un changement, avant de démarrer réellement une compilation.
Comme mentionné ici , assurez-vous d'utiliser la bonne adresse pour votre serveur Jenkins:
puisque nous exécutons Jenkins en tant que serveur Web autonome sur le port 8080, l'URL aurait dû être sans /jenkins
, comme ceci:
http://jenkins:8080/git/notifyCommit?url=git@gitserver:tools/common.git
Pour renforcer ce dernier point, ptha ajoute dans les commentaires :
Cela peut être évident, mais j'ai eu des problèmes avec:
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>.
Le paramètre url doit correspondre exactement à ce que vous avez dans l' URL du référentiel de votre travail Jenkins.
Lors de la copie d'exemples, j'ai omis le protocole, dans notre casssh://
, et cela n'a pas fonctionné.
Vous pouvez également utiliser un simple hook post-reception comme dans " Push based builds using Jenkins and GIT "
#!/bin/bash
/usr/bin/curl --user USERNAME:PASS -s \
http://jenkinsci/job/PROJECTNAME/build?token=1qaz2wsx
Configurez votre travail Jenkins pour pouvoir «déclencher des builds à distance» et utiliser un jeton d'authentification (1qaz2wsx
dans cet exemple).
Cependant, il s'agit d'un script spécifique au projet, et l'auteur mentionne un moyen de le généraliser.
La première solution est plus simple car elle ne dépend pas de l'authentification ou d'un projet spécifique.
Je veux vérifier dans l'ensemble de modifications si au moins un fichier java est là, la construction doit démarrer.
Supposons que les développeurs aient modifié uniquement les fichiers XML ou les fichiers de propriétés, la construction ne devrait pas démarrer.
Fondamentalement, votre script de construction peut:
- mettre des notes de 'construction' (voir
git notes
) sur le premier appel
- lors des appels suivants, récupérez la liste des commits entre
HEAD
le candidat de votre branche pour la construction et le commit référencé par le git notes
'build' (git show refs/notes/build
): git diff --name-only SHA_build HEAD
.
- votre script peut analyser cette liste et décider s'il doit continuer avec la construction.
- dans tous les cas, créez / déplacez votre
git notes
' build
' vers HEAD
.
Mai 2016: cwhsu indique dans les commentaires l'url possible suivante:
vous pouvez simplement utiliser curl --user USER:PWD http://JENKINS_SERVER/job/JOB_NAME/build?token=YOUR_TOKEN
si vous définissez la configuration du déclencheur dans votre élément
Juin 2016, souligne polaretto dans les commentaires :
Je voulais ajouter qu'avec juste un peu de script shell, vous pouvez éviter la configuration manuelle des URL, surtout si vous avez de nombreux référentiels dans un répertoire commun.
Par exemple, j'ai utilisé ces extensions de paramètres pour obtenir le nom du dépôt
repository=${PWD%/hooks};
repository=${repository##*/}
puis utilisez-le comme:
curl $JENKINS_URL/git/notifyCommit?url=$GIT_URL/$repository