web-dev-qa-db-fra.com

Pipeline Jenkins: checkout git commit explicite

Je veux pouvoir dire quelque chose comme:

git branch: commitHash, credentialsId: credentialsId, url: url

Le cas d'utilisation: je fais des builds et des tests en parallèle sur différentes plateformes, et je veux m'assurer que chacun obtient le même code. Il s'agit de C++, et nous construisons sur des plates-formes distinctes ainsi que sur celles-ci.

Si je fais ce qui précède, cela échoue - le code sous-jacent suppose que la branche donnée est en fait une branche, ou 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ées auparavant, bien qu'aucune réponse réelle - juste des suggestions comme pour cacher le code source à la place, etc. Pas vraiment ce que je cherche.

La documentation suggère qu'il devrait être possible de donner des hachages de validation explicites, en utilisant éventuellement des branches à la place, mais je ne peux pas travailler sur la syntaxe et ne trouve aucun exemple. Quand je le fais, je reçois la branche master, je pense - dans notre configuration, master ne fonctionne pas.

Jusqu'à présent, la seule solution que j'ai trouvée a été de vérifier la branche, puis d'appeler explicitement git pour obtenir la validation:

                git branch: branch, credentialsId: credentialsId, url: url
                sh 'git checkout ' + commitHash

(où branche est la branche pour laquelle j'ai initialement obtenu le hachage en haut du travail. Cela fonctionne mais n'est pas le plus net.

Quelqu'un a un meilleur moyen?

18
johnfo

Utilisez une étape scm général

checkout([$class: 'GitSCM', branches: [[name: commitHash ]],
     userRemoteConfigs: [[url: 'http://git-server/user/repository.git']]])
22
Yuri G.

L'exemple de Yuri G n'a pas fonctionné pour moi lorsque jenkins n'avait pas d'espace de travail en raison de la vérification initiale. Les travaux suivants dans ce cas. Je ne comprends pas pourquoi ils sont si différents.

    def commitId = "<insert sha here>"

    checkout ( [$class: 'GitSCM',
        branches: [[name: commitId ]],
        userRemoteConfigs: [[
            credentialsId: 'deploy key for your repo', 
            url: 'repo url']]])
10
Peter Kahn