我正在尝试在Jenkins管道中检索git分支和哈希,但是由于某些奇怪的原因,特别是分支的stdout总是返回为“ HEAD”。如果我在bash中运行确切的命令,它将正常工作。我得到了“开发”和哈希。
管道
stage('Build') {
script {
GIT_BRANCH = sh(returnStdout: true, script: "git rev-parse --abbrev-ref HEAD").trim()
GIT_HASH = sh(returnStdout: true, script: "git rev-parse --short HEAD").trim()
}
echo "branch is: ${GIT_BRANCH}"
echo "hash is: ${GIT_HASH}"
}
输出
Running shell script
+ git rev-parse --abbrev-ref HEAD
Running shell script
+ git rev-parse --short HEAD
branch is: HEAD
hash is: dd96820
答案 0 :(得分:0)
这似乎与issue JENKINS-45962有关:“ GIT_BRANCH
变量未在jenkins管道中填充”
它引用JENKINS-26100,它允许SCM步骤返回修订状态(而不是分支)。
发表评论:
我不打算更改此设置,因为JENKINS-26100允许结帐步骤(和git步骤)从结帐中返回名称和值的映射。
管道可以(而且经常)使用多个结帐步骤,与读取环境变量并确定哪个结帐提供了哪个结帐相比,将特定结帐的返回值存储在地图中更加干净,安全且易于理解环境变量。
由于存在多个多个检出步骤,因此不再填充一个环境变量(例如GIT_BRANCH
)。
由于HEAD始终是分离的,因此... rev-parse
将始终返回提交,而不是分支名称。