Jenkins管道分支名称返回null

pog*_*man 14 git groovy jenkins

我正在尝试为jenkins groovy脚本获取我的分支名称.我无法获取当前的分支名称.我尝试以下方法:

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

这是输出 - 它总是返回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
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

pog*_*man 37

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

BRANCH_NAME对于多分支项目,这将设置为正在构建的分支的名称,例如,如果您希望从主服务器而不是从功能部门部署到生产环境.

我在正常的pipline测试


b.b*_*ben 7

我的解决方法,不知道是否为别人工作..

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

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


vvu*_*tic 7

在我正在使用的管道作业中env.GIT_BRANCH,它解决了origin/{BRANCH}

对于多分支作业,env.GIT_BRANCH解析为{BRANCH}(no origin/)。


Von*_*onC 5

git.exe checkout -f 33b531b2f1caaf8b64d968e437306f39d2dba1da
Run Code Online (Sandbox Code Playgroud)

这将使 git repo 进入分离的 HEAD模式,就其本质而言,它没有分支。

Jenkinsfile

checkout 步骤将从源代码管理中检出代码;scm是一个特殊变量,它指示结帐步骤克隆触发此流水线运行的特定修订。

所以${env.BRANCH_NAME}是空的。

正如“ Jenkins Workflow Checkout Accessing BRANCH_NAME and GIT_COMMIT ”中提到的,您可以使用常规语法获取您刚刚检出的 SHA1(在 Jenkins 管道 DSL 中进行调整):

sh 'git rev-parse HEAD > commit'
def commit = readFile('commit').trim()
Run Code Online (Sandbox Code Playgroud)


小智 5

在 Jenkins 中有两个管道选项:

  1. 新建项目 -> 管道 ->env.BRANCH_NAME返回分支null
  2. 新建项目 -> 多分支管道 ->env.BRANCH_NAME返回分支master or branch name