Jenkins 多分支管道的分支名称变量是什么?

What is the branch name variable for Jenkins multibranch pipelines?

我需要知道我的 Jenkins 多分支管道中正在构建哪个分支,以便它 运行 正确执行步骤。

我们正在使用带有 devreleasemaster 分支的 gitflow 模式,所有这些分支都用于创建工件。 dev 分支会自动部署,其他两个不会。还有 featurebugfixhotfix 分支。这些分支应该被构建,但不会产生工件。如果他们的代码有问题,它们应该只是用来通知开发人员。

在标准构建中,我可以访问 $GIT_BRANCH 变量以了解正在构建哪个分支,但我的多分支管道中未设置该变量。我也试过 env.GIT_BRANCH,我试图将 $GIT_BRANCH 作为参数传递给构建。似乎没有任何效果。我假设因为构建知道正在构建的分支(我可以在控制台输出的顶部看到分支名称)所以我可以使用一些东西 - 我只是找不到任何对它的引用。

还没有专门用于此目的的变量 (JENKINS-30252)。同时,您可以利用子项目名称取自分支名称这一事实,并使用

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

此问题现已解决,请参阅

我发现这个 Whosebug post 示例很有用:

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

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

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

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

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

Jenkins 文档列出了所有环境变量供您阅读 here

在 Jenkins 多分支管道作业中需要考虑 2 个分支:

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

所以一份工作可能有 BRANCH_NAME=PR-123 和 GIT_BRANCH=my-scm-branch-name