Jenkins pipeline: la caisse explicite git commit
Je veux être en mesure de dire quelque chose comme:
git branch: commitHash, credentialsId: credentialsId, url: url
Le cas d'utilisation: je fais en parallèle de construire et de tester fonctionne sur différentes plates-formes, et que vous voulez de s'assurer que chacun reçoit le même code. C'est le C++, et nous nous appuyons sur des plateformes distinctes ainsi que la construction sur eux.
Si je le fais ci-dessus, il tombe en panne - le code sous-jacent suppose la branche est en fait une branche, ou que vous obtenez quelque chose comme:
[Linux64 Build] > git rev-parse origin/e4b6c976a0a986c348a211579f1e8fd32cf29567^{commit} # timeout=10
[Pipeline] [Linux64 Build] }
[Pipeline] [Linux64 Build] //dir
[Pipeline] [Linux64 Build] }
[Pipeline] [Linux64 Build] //node
[Pipeline] [Linux64 Build] }
[Linux64 Build] Failed in branch Linux64 Build
J'ai vu des variations sur cette question posée, mais pas de réponses, juste des suggestions comme pour ranger le code source au lieu de cela, etc. Pas vraiment ce que je suis après.
La documentation suggère qu'il devrait être possible de donner explicite commettre des hachages, éventuellement à l'aide de branches à la place, mais je ne peux pas travailler la syntaxe et ne peut pas trouver des exemples. Quand je le fais, je reçois la branche master, je pense que - dans notre configuration, le maître ne fonctionne pas.
Jusqu'à présent, la seule solution que j'ai trouvé a été à la caisse de la succursale et ensuite appeler explicitement git pour obtenir la validation:
git branch: branch, credentialsId: credentialsId, url: url
sh 'git checkout ' + commitHash
(où la branche est la branche j'ai d'abord eu le hachage en haut de la tâche. Il fonctionne, mais n'est pas la plus élégante.
Quelqu'un a une meilleure façon?
- Voir les commentaires de 2017-07-12 et 2017-07-13 dans [JENKINS-31826] (issues.jenkins-ci.org/browse/JENKINS-31826)
Vous devez vous connecter pour publier un commentaire.
Utiliser un général scm étape
CloneOptions
, commeextensions: [[$class: 'CloneOption', noTags: true, reference: '', shallow: true]]
. Pour contourner le problème, je suis en train de passer ce paramètre de manière conditionnelle en vérifiant sibranch
fait référence à un hachage SHA-1 (branch.matches('^[a-fA-F0-9]{40}$')
).Yuri G de l'exemple ne fonctionne pas pour moi lorsque jenkins manquait un espace de travail en raison initiale de la caisse. Les ouvrages suivants, en ce cas. Je ne comprends pas pourquoi, ils sont tous si différents.