scripted scm parallel examples example git jenkins groovy jenkins-workflow

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.



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()