Obtener el nombre de la rama git en Jenkins Jenkinsfile
jenkinsfile variables (6)
He creado una canalización de Jenkins y está extrayendo el guión de la tubería de SCM.
Establecí el especificador de rama en '' all
'', por lo que se basa en cualquier cambio en cualquier rama.
¿Cómo accedo al nombre de la rama que causa esta compilación desde el archivo Jenkins?
Todo lo que he intentado osa fuera nulo excepto
sh(returnStdout: true, script: ''git rev-parse --abbrev-ref HEAD'').trim()
que siempre es master
.
El cambio a una tubería multibranquio me permitió acceder al nombre de la sucursal. No se recomendó una tubería regular.
Para mí, esto funcionó: (usando Jenkins 2.150, usando un tipo de tubería simple, no multibranquios, mi especificador de rama: ''origen / ramas **'')
echo ''Pulling... '' + env.GIT_BRANCH
Salida:
Pulling... origin/myBranch
donde myBranch es el nombre de la rama característica
Si tiene un archivo jenkins para su canalización, verifique si ve en el momento de la ejecución el nombre de su rama en sus variables de entorno .
Puedes imprimirlos con:
pipeline {
agent any
environment {
DISABLE_AUTH = ''true''
DB_ENGINE = ''sqlite''
}
stages {
stage(''Build'') {
steps {
sh ''printenv''
}
}
}
}
Sin embargo, PR 91 muestra que el nombre de la rama solo se establece en ciertas configuraciones de canalización:
- Condicional de rama (ver este guión maravilloso )
- Oleoducto de ramificaciones paralelas (como lo ve el OP)
Solo obtener el nombre de scm.branches
no es suficiente si ha utilizado un parámetro de compilación como un especificador de rama, por ejemplo, ${BRANCH}
. Necesitas expandir esa cadena a un nombre real:
scm.branches.first().getExpandedName(env.getEnvironment())
Tenga en cuenta que getEnvironment()
debe ser un getEnvironment()
explícito; de lo contrario, env
buscará una variable de entorno llamada entorno .
No olvide que necesita aprobar esos métodos para hacerlos accesibles desde el sandbox.
Un colega me dijo que usara scm.branches[0].name
y funcionó. Lo envolví a una función en mi archivo Jenkins:
def getGitBranchName() {
return scm.branches[0].name
}
Usar tubería multibranquio ... no tubería
En mi guión ..
stage(''Build'') {
node {
echo ''Pulling...'' + env.BRANCH_NAME
checkout scm
}
}
Rinde ...
Pulling...master