groovy Jenkins管道分支名称返回空值

vhipe2zx  于 2022-11-01  发布在  Jenkins
关注(0)|答案(8)|浏览(253)

我正在尝试获取jenkins groovy脚本的分支名称。我无法获取当前分支名称。我尝试以下操作:

stage('Check out code')
checkout scm
echo "My branch is: ${env.BRANCH_NAME}"

下面是输出-它总是返回null。

Checking out Revision 33b531b2f1caaf8b64d968e437306f39d2dba1da   (origin/pipeline)
  > git.exe config core.sparsecheckout # timeout=10
  > git.exe checkout -f 33b531b2f1caaf8b64d968e437306f39d2dba1da
 [Pipeline] echo
 My branch is: null

我错过了什么吗?

uurity8g

uurity8g1#

此变量仅适用于多分支管道:
分支_NAME对于多分支项目,这将被设置为正在生成的分支的名称,例如,如果您希望从主分支而不是功能分支部署到生产。
我在一条正常的管道上测试

xfyts7mz

xfyts7mz2#

在Jenkins中,有两种管道选项:
1.新建项目-〉管道--〉env.BRANCH_NAME返回分支null
1.新建项目-〉多分支管道--〉env.BRANCH_NAME返回分支master or branch name

46scxncf

46scxncf3#

我的变通办法,不知道是否为别人工作。

def branchName = getCurrentBranch()
echo 'My branch is' + branchName

def getCurrentBranch () {
    return sh (
        script: 'git rev-parse --abbrev-ref HEAD',
        returnStdout: true
    ).trim()
}
vxbzzdmp

vxbzzdmp4#

git.exe checkout -f 33b531b2f1caaf8b64d968e437306f39d2dba1da

这将使git repo进入一个detached HEADmode,从本质上讲,它没有分支。
Jenkinsfile开始:
checkout 步骤将从源代码管理 checkout 代码; scm是一个特殊变量,它指示 checkout 步骤克隆触发此管道运行的特定修订版本。
所以${env.BRANCH_NAME}为空。
正如在“Jenkins Workflow Checkout Accessing BRANCH_NAME and GIT_COMMIT“中所提到的,您可以使用groovy语法获得刚刚 checkout 的SHA1(将在Jenkins管道DSL中进行修改):

sh 'git rev-parse HEAD > commit'
def commit = readFile('commit').trim()
jexiocij

jexiocij5#

在管道作业中,我使用env.GIT_BRANCH,它解析为origin/{BRANCH}
在多分支作业的情况下,env.GIT_BRANCH解析为{BRANCH}(无origin/)。

tpgth1q7

tpgth1q76#

我也遇到了同样的问题,但我通过更改

println "${env.BRANCH_NAME}"

println "${BRANCH_NAME}"

注意我的插件也在分离模式下 checkout :

git checkout -f e10a170e17fb5f9282f903a7b3cd17bd2e181dee
lh80um4z

lh80um4z7#

您可以从简单的管缐使用下列指令码:

\\...
stage('Test') {
        steps {
            script {
                branchName = sh(label: 'getBranchName', returnStdout: true, script: 'git rev-parse --abbrev-ref HEAD').trim()
                println branchName
            }   
        }
      } 
\\...
q3aa0525

q3aa05258#

这个代码对我很有效。

def BRANCH_NAME = getCurrentBranch()
echo 'Current branch is' + BRANCH_NAME
def getCurrentBranch () {
    return sh (
    script: 'git name-rev --name-only HEAD',
    returnStdout: true
    ).trim()
}

相关问题