J'aimerais accéder à des variables git telles que GIT_COMMIT
et GIT_BRANCH
lorsque j'ai extrait un référentiel de git plus bas dans le flux de construction. Actuellement, je ne trouve aucune variable disponible pour accéder à ces deux paramètres.
node {
git git+ssh://git.com/myproject.git
echo "$GIT_COMMIT - $BRANCH_NAME"
}
Ces variables sont-elles disponibles et, au cas où, où les trouverais-je? Cela ne me dérange pas si elles sont disponibles via des variables groovy ou ailleurs, juste que je peux y accéder.
Peut-être que je n’ai pas les compétences de débogage dans Groovy et c’est facile à trouver, mais je ne le trouve pas avec mes compétences limitées.
Pour résoudre ce problème, le meilleur moyen pour le moment consiste à utiliser le pipeline multi-branches, et il peut être intéressant de savoir que Bitbucket et Github ont des plugins dans Jenkins qui configurent une organisation et découvrent automatiquement de nouveaux projets. Cela fonctionne nativement puis avec env.GIT_BRANCH
Pour commit ID, je suggérerais ce que @mkobit a écrit ci-dessus.
En fonction du plug-in SCM que vous utilisez, l'étape checkout
peut renvoyer des informations supplémentaires sur la révision. Cela a été résolu dans JENKINS-26100 . Il a été publié dans la version 2.6 du plugin workflow-scm-step
.
Par exemple, en utilisant le plugin Git, vous pouvez faire quelque chose comme:
final scmVars = checkout(scm)
echo "scmVars: ${scmVars}"
echo "scmVars.GIT_COMMIT: ${scmVars.GIT_COMMIT}"
echo "scmVars.GIT_BRANCH: ${scmVars.GIT_BRANCH}
Cela varie en fonction du plug-in que vous utilisez, donc la réponse d'origine pourrait mieux fonctionner pour vous.
Réponse originale
Avec la version 2.4 du plug-in Nœuds et processus de pipeline , vous pouvez simplement faire:
def gitCommit = sh(returnStdout: true, script: 'git rev-parse HEAD').trim()
C’est ce que je suis en train de faire, à partir de exemple fourni dans l’exemple de rapport Jenkins :
node {
git url: 'https://git.com/myproject.git'
sh 'git rev-parse --abbrev-ref HEAD > GIT_BRANCH'
git_branch = readFile('GIT_BRANCH').trim()
echo git_branch
sh 'git rev-parse HEAD > GIT_COMMIT'
git_commit = readFile('GIT_COMMIT').trim()
echo git_commit
}
Edit vous pouvez le faire plus rapidement via
git_commit = sh(returnStdout: true, script: "git rev-parse HEAD").trim()
En fonction des informations dont vous avez besoin, il existe une solution très simple: récupérez l'opération "checkout scm": elle fournit GIT_BRANCH, GIT_COMMIT, GIT_PREVIOUS_COMMIT, GIT_PREVIOUS_SUCCESSFUL_COMMIT et GIT_URL.
node {
stage ("Checkout") {
scmInfo = checkout scm
/*...*/
echo "scm : ${scmInfo}"
echo "${scmInfo.GIT_COMMIT}"
}
}
Cela produira:
...
[Pipeline] echo
scm : [GIT_BRANCH:my-branch, GIT_COMMIT:0123456789abcdefabcdef0123456789abcdef01, GIT_PREVIOUS_COMMIT:aaaabbbcccdddeeeefffe0123456789012345678, GIT_PREVIOUS_SUCCESSFUL_COMMIT:aaaabbbcccdddeeeefffe0123456789012345678, GIT_URL:http://my.si.te/my-repository.git]
[Pipeline] echo
0123456789abcdefabcdef0123456789abcdef01
...
Plus de détails ici Jenkins Pipeline SCM Steps
Vous pouvez définir vos tâches (extraire les informations git de la dernière validation) dans node
pour les exécuter dans une file d'attente.
node {
//Code checkout from SCM (here - `git`)
checkout scm
stage("GIT INFO"){
echo ":::::::::::GIT_SHORT_COMMIT::::::::::::::::::::::::"
GIT_SHORT_COMMIT = sh(returnStdout: true, script: "git log -n 1 --pretty=format:'%h'").trim()
//echo in jenkins console
echo GIT_SHORT_COMMIT
//wanted to send these info to build artifacts, append to any file
sh("echo ${GIT_SHORT_COMMIT} > GIT_SHORT_COMMIT")
//Similar proceed for other git info's
echo ":::::::::::GIT_COMMITTER_EMAIL::::::::::::::::::::::::"
GIT_COMMITTER_EMAIL = sh(returnStdout: true, script: "git show -s --pretty=%ae").trim()
sh("echo ${GIT_COMMITTER_EMAIL} > GIT_COMMITTER_EMAIL-${GIT_COMMITTER_EMAIL}")
echo ":::::::::::GIT_COMMITTER_NAME::::::::::::::::::::::::"
GIT_COMMITTER_NAME = sh(returnStdout: true, script: "git show -s --pretty=%an").trim()
sh("echo ${GIT_COMMITTER_NAME} > GIT_COMMITTER_NAME-${GIT_COMMITTER_NAME}")
}
Une fois votre travail terminé, vous verrez trois fichiers supplémentaires provenant de la tâche ci-dessus dans votre espace de travail:
.
|-- [email protected]
|-- GIT_COMMITTER_NAME-username
|-- GIT_SHORT_COMMIT_<commit-short-ID-ef9e91c>
Cet exemple pourrait vous amener plus loin: https://github.com/jenkinsci/pipeline-examples/tree/master/pipeline-examples/gitcommit
Dans cet exemple, ils dirigent la sortie des commandes git vers un fichier, puis lisent le fichier.
Le moyen le plus simple d'extraire la variable Git dans Jenkins via Jenkinsfile
node {
def scmVars = checkout scm
echo 'scm : the commit id is ' +scmVars.GIT_COMMIT
echo 'scm : the commit branch is ' +scmVars.GIT_BRANCH
echo 'scm : the previous commit id is ' +scmVars.GIT_PREVIOUS_COMMIT
def commitEmail = sh(returnStdout: true, script: "git --no-pager show -sformat=\'%ae\'")
echo " the commiter email is'${commitEmail}'"
def commitName = sh(returnStdout: true, script: "git --no-pager show -s format=\'%an\'")
echo " the commiter name is'${commitName}'"
}
En console, vous obtiendrez le
GIT_COMMIT:
GIT_BRANCH:
GIT_PREVIOUS_COMMIT:
commitEmail:
commitName: