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

Chr*_*don 51 jenkins jenkins-plugins jenkins-pipeline

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

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

任何帮助,将不胜感激.

Krz*_*soń 88

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

Pipeline Groovy插件2.18开始,您也可以使用BRANCH_NAME (env不是必需的,但仍然可以使用).

  • 有趣的是,这些都不适合我.倾倒环境下的一切 - 既没有BRANCH也没有BRANCH_NAME.当我尝试引用BRANCH_NAME时,我得到"groovy.lang.MissingPropertyException:没有这样的属性:BRANCH_NAME用于类:groovy.lang.Binding"管道Groovy:2.32,Jenkins 2.32,BitBucket 4.6.2,用于Jenkins 3.0的BitBucket Server Webhook. 1 (4认同)
  • 奇怪的是,我发现这适用于某些存储库,而不适用于其他存储库。我在 jenkins 文件中使用同一行设置了两个多分支管道:`if(env.BRANCH_NAME == "master")`,它在一个中按预期工作,在另一个中产生 `RejectedAccessException: unclassified field java.lang .字符串BRANCH_NAME`。很奇怪。 (2认同)
  • @Vroomfundel(如果您正在执行不是多分支管道作业的管道作业,(显然)预期条件,原因是[JENKINS-47226](https://issues.jenkins-ci.org/browse/JENKINS- 47226)-分支名称在单个管道版本中不可用。 (2认同)

Jes*_*ick 10

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

env.JOB_NAME.replaceFirst('.+/', '')
Run Code Online (Sandbox Code Playgroud)

现在已经解决了,请参阅KrzysztofKrasoń的回答.

  • 您现在可以使用`$ {env.BRANCH_NAME}`([JENKINS-30252](https://issues.jenkins-ci.org/browse/JENKINS-30252)已经解决) (8认同)
  • 或者只是在`workflow-cps`的足够新版本中使用`$ BRANCH_NAME`. (2认同)

Dav*_*wer 10

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

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

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

  • 我不确定我们的 Jenkins 设置有什么不同,但在我们的例子中,GIT_BRANCH 也是 PR-123。 (4认同)
  • 您可以在 https://your-jenkins-server.example.com/env-vars.html 找到为 Jenkins 实例配置的所有环境变量 (2认同)