Git Jenkins管道分支名称返回null

Git Jenkins管道分支名称返回null,git,jenkins,groovy,Git,Jenkins,Groovy,我正在尝试获取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

我正在尝试获取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
我错过什么了吗

git.exe checkout -f 33b531b2f1caaf8b64d968e437306f39d2dba1da
这将使吉特回购进入一个新的阶段,就其本质而言,吉特回购没有分支机构

发件人:

签出步骤将从源代码管理中签出代码
scm
是一个特殊变量,指示签出步骤克隆触发此管道运行的特定版本

因此,
${env.BRANCH\u NAME}
为空

如“”中所述,您可以使用groovy语法(将在Jenkins管道DSL中进行调整)获得刚刚签出的SHA1:


此变量仅适用于多分支管线:

分行名称 对于多分支项目,这将设置为正在生成的分支的名称,例如,如果您希望从主分支部署到生产,而不是从功能分支部署到生产


我在一条正常的管线上测试我的工作环境,不知道是否为其他人工作

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

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

我也有同样的问题,但我通过改变

println "${env.BRANCH_NAME}"

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

git checkout -f e10a170e17fb5f9282f903a7b3cd17bd2e181dee

在Jenkins中,有两个管道选项:

  • 新建项目->管道-->
    env.BRANCH\u NAME
    return BRANCH
    null
  • 新建项目->多分支管道-->
    env.BRANCH\u NAME
    return BRANCH
    master或BRANCH NAME

  • 在管道作业中,我使用的是
    env.GIT_BRANCH
    ,它解析为
    origin/{BRANCH}


    在多分支作业的情况下,
    env.GIT_BRANCH
    解析为
    {BRANCH}
    (无
    origin/

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

    试过:
    echo“我的分支是:${branch\u NAME}”
    ?@tim\u yates试过,结果也一样@pogorman-你成功了吗?我有同样的问题(使用普通管道)!此变量仅适用于多分支管道-请参见下面的答案。我现在只使用多分支管道,这意味着您可以尝试从签出的SHA1中猜测涉及哪个分支:
    git checkout -f e10a170e17fb5f9282f903a7b3cd17bd2e181dee
    
    \\...
    stage('Test') {
            steps {
                script {
                    branchName = sh(label: 'getBranchName', returnStdout: true, script: 'git rev-parse --abbrev-ref HEAD').trim()
                    println branchName
                }   
            }
          } 
    \\...