scm - Git Variables en el plugin de Jenkins Workflow
pipeline groovy jenkins (6)
Dependiendo de la información que necesita, hay una solución muy simple: obtener la operación "checkout scm" return: proporciona GIT_BRANCH, GIT_COMMIT, GIT_PREVIOUS_COMMIT, GIT_PREVIOUS_SUCCESSFUL_COMMIT y GIT_URL.
node {
stage ("Checkout") {
scmInfo = checkout scm
/*...*/
echo "scm : ${scmInfo}"
echo "${scmInfo.GIT_COMMIT}"
}
}
Esto dará como resultado:
...
[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
...
Más detalles aquí Jenkins Pipeline SCM Steps
Me gustaría acceder a las variables de git, como GIT_COMMIT y GIT_BRANCH cuando reviso un repositorio desde git más abajo en la secuencia de compilación. Actualmente no encuentro ninguna variable disponible para acceder a estos dos parámetros.
node {
git git+ssh://git.com/myproject.git
echo "$GIT_COMMIT - $BRANCH_NAME"
}
¿Están disponibles esas variables y, en caso, dónde las encontraría? No me importa si están disponibles a través de variables groovy o donde sea, solo que puedo acceder a ellos.
Tal vez carezco de las habilidades de depuración en Groovy y esto es fácil de encontrar, pero simplemente no puedo encontrarlo con mis habilidades limitadas.
Este ejemplo puede llegar más lejos: https://github.com/jenkinsci/pipeline-examples/tree/master/pipeline-examples/gitcommit
En este ejemplo, están conectando la salida de los comandos de git a un archivo y luego leyendo el archivo.
Esto es lo que estoy haciendo, basado en el ejemplo proporcionado en el repositorio de ejemplos de 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
}
La buena manera de solucionar esto por ahora es usar la canalización de múltiples sucursales, y sería bueno saber que Bitbucket y Github tienen complementos en Jenkins que configuran una organización y descubren automáticamente nuevos proyectos. Esto funciona de forma nativa con env.GIT_BRANCH
Para la identificación de compromiso, sugeriría lo que @mkobit escribió anteriormente.
Puede definir sus trabajos (extrayendo la información de git de la última confirmación) dentro del node
para su ejecución en una cola.
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}")
}
Una vez que haya terminado su trabajo, verá tres archivos adicionales de la tarea anterior en su espacio de trabajo:
. |-- [email protected] |-- GIT_COMMITTER_NAME-username |-- GIT_SHORT_COMMIT_<commit-short-ID-ef9e91c>
Según el complemento de SCM que esté utilizando, el paso de checkout
la checkout
puede arrojar información adicional sobre la revisión. Esto fue resuelto en JENKINS-26100 . Fue lanzado en la versión 2.6 del plugin workflow-scm-step
.
Por ejemplo, usando el plugin Git, puedes hacer algo como:
final scmVars = checkout(scm)
echo "scmVars: ${scmVars}"
echo "scmVars.GIT_COMMIT: ${scmVars.GIT_COMMIT}"
echo "scmVars.GIT_BRANCH: ${scmVars.GIT_BRANCH}
Esto variará según el complemento que use, por lo que la respuesta original puede funcionar mejor para usted.
Respuesta original
Con la versión 2.4 del complemento de nodos y procesos Pipeline , simplemente puede hacer:
def gitCommit = sh(returnStdout: true, script: ''git rev-parse HEAD'').trim()