Jenkins Multibranch管道:什么是分支名称变量?

时间:2015-09-25 19:48:39

标签: jenkins jenkins-plugins jenkins-pipeline

我是Jenkins Pipeline插件的新手,尤其是multibranch管道插件的新手。在标准版本中,我可以访问$ GIT_BRANCH变量来了解正在构建的分支。但是,该变量未在multibranch管道中设置。我也尝试了env.GIT_BRANCH,并尝试将$ GIT_BRANCH作为参数传递给构建。似乎没什么用。我假设,因为构建知道正在构建的分支(我可以在控制台输出的顶部看到分支名称,有一些我可以使用,我只是找不到它的任何引用。

以下是为什么这很重要的一个例子。我们正在使用gitflow模式。我们有dev,release和master分支,它们都用于创建工件。 dev分支自动部署,另外两个没有。还有功能,错误修复和修补程序分支。应该构建这些分支,但不会产生伪像。如果他们的代码有问题,他们应该只是用来通知开发人员。我需要知道正在构建哪个分支才能运行正确的步骤。

任何帮助将不胜感激。

6 个答案:

答案 0 :(得分:80)

env.BRANCH_NAME变量包含分支名称。

Pipeline Groovy Plugin 2.18开始,您也可以使用BRANCH_NAME  (env不是必需的,但仍然被接受。)

答案 1 :(得分:10)

目前还没有专门的变量(JENKINS-30252)。在此期间,您可以利用子项目名称取自分支名称的事实,并使用

env.JOB_NAME.replaceFirst('.+/', '')

<击>

现已解决此问题,请参阅Krzysztof Krasoń's answer

答案 2 :(得分:2)

在Jenkins多分支管道工作中要考虑两个分支:

  1. Jenkins职位分支-env.BRANCH_NAME。该名称可能与git分支的名称相同,但也可能称为PR-123或类似名称
  2. git分支-env.GIT_BRANCH。这是git中的实际分支名称。

因此,作业可能具有BRANCH_NAME = PR-123和GIT_BRANCH = my-scm-branch-name

答案 3 :(得分:1)

我发现这个stackoverflow帖子示例很有用:Git Variables in Jenkins Workflow plugin

sh '//...
    git rev-parse --abbrev-ref HEAD > GIT_BRANCH'
    git_branch = readFile('GIT_BRANCH').trim()
    echo git_branch
    //...
   '

答案 4 :(得分:1)

Jenkins文档列出了供您仔细阅读的here的所有env变量

答案 5 :(得分:0)

另一种方法是使用git命令来获取当前jenkins管道上的分支名称。例如,您可以添加以下代码段以在Jenkinsfile中打印分支名称。

...
script {
    def BRANCH = sh(returnStdout: true, script: 'git rev-parse --abbrev-ref HEAD').trim()
    echo ${BRANCH}
}
...