81

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

我们正在使用带有 、 和 分支的 gitflow 模式devrelease它们master都用于创建工件。分支自动部署,dev其他两个没有。还有feature,bugfixhotfix分支。应该构建这些分支,但不能生成工件。如果他们的代码有问题,它们应该只用于通知开发人员。

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

4

6 回答 6

125

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

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

于 2016-05-07T06:14:09.110 回答
11

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

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

现在已经解决了,请参阅Krzysztof Krasoń 的回答

于 2015-09-27T13:03:26.910 回答
4

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

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

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

于 2020-06-05T10:59:12.870 回答
2

Jenkins 文档在此处列出了所有 env 变量供您阅读

于 2020-03-04T08:53:15.697 回答
1

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

...
script {
    def BRANCH = sh(returnStdout: true, script: 'git rev-parse --abbrev-ref HEAD').trim()
    echo ${BRANCH}
}
...
于 2019-12-27T21:27:12.387 回答
0

我发现这个 stackoverflow 帖子示例很有用:Jenkins Workflow 插件中的 Git 变量

sh '//...
    git rev-parse --abbrev-ref HEAD > GIT_BRANCH'
    git_branch = readFile('GIT_BRANCH').trim()
    echo git_branch
    //...
   '
于 2016-05-07T03:08:44.277 回答