Comment déclencher une compilation à distance depuis Jenkins?
Comment configurer le hook de validation post Git?
Mon exigence est que chaque fois que des modifications sont apportées dans le référentiel Git pour un projet particulier, il démarre automatiquement la compilation Jenkins pour ce projet.
Dans la section de construction du déclencheur Jenkins, j'ai sélectionné la construction du déclencheur à distance.
Dans le .git
répertoire, le répertoire hooks est là dans lequel nous devons configurer le fichier post-commit.
Je ne comprends pas comment déclencher une construction à partir de là (je connais une partie où 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 répertoire de hooks de serveur git (hook post commit).
Chaque fois que les modifications se produisent dans le référentiel, il exécute la construction automatisée.
Je veux vérifier dans le changeset 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 que la construction ne doit pas démarrer.
Avec xml
, supposons que les .java
fichiers soient là, la construction devrait commencer.
Réponses:
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:
Comme mentionné ici , assurez-vous d'utiliser la bonne adresse pour votre serveur Jenkins:
Pour renforcer ce dernier point, ptha ajoute dans les commentaires :
Vous pouvez également utiliser un simple hook post-reception comme dans " Push based builds using Jenkins and GIT "
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.
Fondamentalement, votre script de construction peut:
git notes
) sur le premier appelHEAD
le candidat de votre branche pour la construction et le commit référencé par legit notes
'build' (git show refs/notes/build
):git diff --name-only SHA_build HEAD
.git notes
'build
' versHEAD
.Mai 2016: cwhsu indique dans les commentaires l'url possible suivante:
Juin 2016, souligne polaretto dans les commentaires :
la source
yourRepo.git/hooks/post-receive
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 cas ssh: // et cela n'a pas fonctionné.J'espère que cela vous aidera: http://nrecursions.blogspot.in/2014/02/how-to-trigger-jenkins-build-on-git.html
C'est juste une question d'utiliser
curl
pour déclencher un travail Jenkins en utilisant les hooks git fournis par git.La commande
peut exécuter un travail Jenkins, où
someJob
est le nom du travail Jenkins.Recherchez le
hooks
dossier dans votre dossier .git caché. Renommez lepost-commit.sample
fichier enpost-commit
. Ouvrez-le avec le Bloc-notes, supprimez la: Nothing
ligne et collez-y la commande ci-dessus.C'est tout. Chaque fois que vous effectuez un commit, Git déclenchera les commandes post-commit définies dans le fichier.
la source
Comme la réponse précédente a montré un exemple de la façon dont le hook complet pourrait ressembler, voici le code de mon hook de travail post-réception:
Dans ce cas, je déclenche des jobs jenkins uniquement lorsque je pousse vers master et non vers d'autres branches.
la source
Je veux ajouter aux réponses ci-dessus que cela devient un peu plus difficile si l'autorisation Jenkins est activée.
Après l'avoir activé, j'ai reçu un message d'erreur indiquant que l'utilisateur anonyme a besoin d'une autorisation de lecture.
J'ai vu deux solutions possibles:
1: Changer mon crochet en:
2: définition de l'autorisation basée sur le projet.
Les anciennes solutions ont l'inconvénient que je devais exposer mon mot de passe dans le fichier hook. Inacceptable dans mon cas.
Le second fonctionne pour moi. Dans les paramètres d'authentification globaux, j'ai dû activer Global> Read for Anonymous user. Dans le projet que je voulais déclencher, je devais activer Job> Build et Job> Read for Anonymous.
Ce n'est toujours pas une solution parfaite car vous pouvez maintenant voir le projet dans Jenkins sans connexion. Il pourrait y avoir une solution encore meilleure en utilisant l'ancienne approche avec connexion http mais je ne l'ai pas compris.
la source