Jenkins 多分支管道的分支名称变量是什么?
What is the branch name variable for Jenkins multibranch pipelines?
我需要知道我的 Jenkins 多分支管道中正在构建哪个分支,以便它 运行 正确执行步骤。
我们正在使用带有 dev
、release
和 master
分支的 gitflow 模式,所有这些分支都用于创建工件。 dev
分支会自动部署,其他两个不会。还有 feature
、bugfix
和 hotfix
分支。这些分支应该被构建,但不会产生工件。如果他们的代码有问题,它们应该只是用来通知开发人员。
在标准构建中,我可以访问 $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_NAME
(env
不是必需的,但仍被接受。)
另一种方法是使用git
命令获取当前jenkins管道上的分支名称。例如,您可以添加以下代码片段以在 Jenkinsfile
中打印分支名称。
...
script {
def BRANCH = sh(returnStdout: true, script: 'git rev-parse --abbrev-ref HEAD').trim()
echo ${BRANCH}
}
...
Jenkins 文档列出了所有环境变量供您阅读 here
在 Jenkins 多分支管道作业中需要考虑 2 个分支:
- Jenkins 工作分支 -
env.BRANCH_NAME
。这可能与 git 分支同名,但也可能称为 PR-123 或类似的
- git 分支 -
env.GIT_BRANCH
。这是 git. 中的实际分支名称
所以一份工作可能有 BRANCH_NAME=PR-123 和 GIT_BRANCH=my-scm-branch-name
我需要知道我的 Jenkins 多分支管道中正在构建哪个分支,以便它 运行 正确执行步骤。
我们正在使用带有 dev
、release
和 master
分支的 gitflow 模式,所有这些分支都用于创建工件。 dev
分支会自动部署,其他两个不会。还有 feature
、bugfix
和 hotfix
分支。这些分支应该被构建,但不会产生工件。如果他们的代码有问题,它们应该只是用来通知开发人员。
在标准构建中,我可以访问 $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_NAME
(env
不是必需的,但仍被接受。)
另一种方法是使用git
命令获取当前jenkins管道上的分支名称。例如,您可以添加以下代码片段以在 Jenkinsfile
中打印分支名称。
...
script {
def BRANCH = sh(returnStdout: true, script: 'git rev-parse --abbrev-ref HEAD').trim()
echo ${BRANCH}
}
...
Jenkins 文档列出了所有环境变量供您阅读 here
在 Jenkins 多分支管道作业中需要考虑 2 个分支:
- Jenkins 工作分支 -
env.BRANCH_NAME
。这可能与 git 分支同名,但也可能称为 PR-123 或类似的 - git 分支 -
env.GIT_BRANCH
。这是 git. 中的实际分支名称
所以一份工作可能有 BRANCH_NAME=PR-123 和 GIT_BRANCH=my-scm-branch-name