我是jenkins/devops的初学者; 我正在遵循这个例子。 当我在本地终端执行以下操作时:
git rev-parse --abbrev-ref HEAD
我获取当前分支的名称。但是,在Jenkinsfile中,日志中会得到:
HEAD
我已经在网上研究了一段时间,但到目前为止仍然找不到原因。这种结果的潜在原因是什么?
额外细节
在我的jenkinsfile中,我正在尝试获取当前git分支的名称(触发webhook的分支),然后将其传递到'git branch'命令中,代码如下:
pipeline {
agent {
label 'ubuntu'
}
stages {
stage('check') {
steps {
script {
env.GIT_BRANCH_NAME=sh(returnStdout: true, script: "git rev-parse --abbrev-ref HEAD").trim()
}
sh 'echo BRANCH_NAME ${GIT_BRANCH_NAME}'
git branch: GIT_BRANCH_NAME, credentialsId: '******', url: 'https://*****/*****/*****.git'
}
....
}
在这条线上
sh 'echo BRANCH_NAME ${GIT_BRANCH_NAME}'
返回 HEAD
我发现可以通过使用 git name-rev --name-only HEAD 绕过这个问题,并修改了脚本代码:
script {
env.GIT_BRANCH_PATH=sh(returnStdout: true, script: "git name-rev --name-only HEAD").trim()
env.GIT_BRANCH_NAME=GIT_BRANCH_PATH.split('remotes/origin/')[1]
}
现在我已经得到了正确的分支名称并且步骤可以运行,但我更愿意以一种不那么hacky的方式来完成这些事情。
使用最佳实践,实现我想要达到的目标的最佳方法是什么?
附言:我没有使用多分支管道,并且要求不使用多分支。
git rev-parse --abbrev-ref HEAD
将只返回HEAD
。这一组 Jenkins 流水线指令对我来说看起来相当可疑/错误,但我并不是 Jenkins 专家。 - torekgit log -n1 --format='%H'
。 - datashaman