Comment dire à Jenkins / Hudson de déclencher une compilation uniquement pour les changements sur un projet particulier dans mon arbre Git?
Le plugin Git a une option (région exclue) pour utiliser des expressions régulières pour déterminer s'il faut ignorer la construction en fonction du fait que les fichiers du commit correspondent à l'expression régulière de la région exclue.
Malheureusement, le plugin Git stock n'a pas de fonctionnalité "région incluse" pour le moment (1.15). Cependant, quelqu'un a publié des correctifs sur GitHub qui fonctionnent sur Jenkins et Hudson et qui implémentent la fonctionnalité souhaitée.
C'est un peu de travail à construire, mais cela fonctionne comme annoncé et a été extrêmement utile car l'un de mes arbres Git a plusieurs projets indépendants.
https://github.com/jenkinsci/git-plugin/pull/49
Mise à jour: Le plugin Git (1.16) a maintenant la fonction de région «incluse».
Ignored commit c6e2b1dca0d1885: No paths matched included region whitelist
. Un indice? Plus de détails ici: stackoverflow.com/questions/47439042/…En gros, vous avez besoin de deux emplois. Un pour vérifier si les fichiers ont changé et un pour faire la construction réelle:
Emploi n ° 1
Cela devrait être déclenché lors des changements dans votre référentiel Git. Il teste ensuite si le chemin que vous spécifiez ("src" ici) a changé, puis utilise la CLI de Jenkins pour déclencher un deuxième travail.
Emploi n ° 2
Configurez ce travail pour prendre un paramètre GIT_REVISION comme ceci, pour vous assurer que vous construisez exactement la révision que le premier travail a choisi de construire.
la source
$? || exit 0
...test $? -eq 0 || exit 0
peut-être?Si vous utilisez une syntaxe déclarative de Jenkinsfile pour décrire votre pipeline de construction, vous pouvez utiliser la condition de changeset pour limiter l'exécution de l'étape uniquement au cas où des fichiers spécifiques sont modifiés. C'est maintenant une fonctionnalité standard de Jenkins et ne nécessite aucune configuration / logiciel supplémentaire.
Vous pouvez combiner plusieurs conditions à l'aide de mots clés
anyOf
ouallOf
pour le comportement OR ou AND en conséquence:la source
Bien que cela n'affecte pas les tâches uniques, vous pouvez utiliser ce script pour ignorer certaines étapes si la dernière validation ne contenait aucune modification:
la source
api/
dossier.) Si vous pouvez résoudre ce problème, j'aimerais une modification suggérée !Si la logique de choix des fichiers n'est pas triviale, je déclencherais l'exécution de script à chaque changement, puis j'écrirais un script pour vérifier si effectivement une construction est nécessaire, puis je déclencherais une construction si elle l'est.
la source
Vous pouvez utiliser Generic Webhook Trigger Plugin pour cela.
Avec une variable comme
changed_files
et une expression$.commits[*].['modified','added','removed'][*]
.Vous pouvez avoir un texte de filtre comme
$changed_files
et une expression régulière de filtre comme"folder/subfolder/[^"]+?"
sifolder/subfolder
est le dossier qui devrait déclencher les compilations.la source
J'ai répondu à cette question dans un autre post:
Comment obtenir la liste des fichiers modifiés depuis la dernière construction dans Jenkins / Hudson
Vous pouvez ajouter la vérification directement en haut du shell d'exécution du travail, et ce sera le
exit 0
cas si aucun changement n'est détecté ... Par conséquent, vous pouvez toujours interroger le niveau supérieur pour que les check-in déclenchent une construction.la source
J'ai écrit ce script pour ignorer ou exécuter des tests s'il y a des changements:
Vous pouvez donc faire quelque chose comme:
./scripts/git-run-if-changed.sh cmd vendor go.mod go.sum fixtures/ tools/ -- go test
la source