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

yqyhoc1h  于 2023-03-11  发布在  Jenkins
关注(0)|答案(6)|浏览(201)

我需要知道Jenkins多分支管道中正在构建哪个分支,以便正确运行步骤。
我们使用的gitflow模式包含devreleasemaster分支,这些分支都用于创建工件。dev分支自动部署,其他两个分支不部署。此外,还有featurebugfixhotfix分支。这些分支应该被构建,但不会产生工件。它们应该只是用来通知开发人员他们的代码是否有问题。
在标准构建中,我可以访问$GIT_BRANCH变量以了解正在构建哪个分支,但在我的多分支管道中没有设置该变量。我试着把$GIT_BRANCH作为一个参数传递给构建,但似乎没有任何效果,我假设既然构建知道正在构建的分支(我可以在控制台输出的顶部看到分支名称)有一些我可以使用的东西-我只是找不到任何引用。

7gs2gvoe

7gs2gvoe1#

env.BRANCH_NAME变量包含分支名称。
Pipeline Groovy Plugin 2.18开始,您还可以只使用BRANCH_NAMEenv不是必需的,但仍然可以接受。)

cfh9epnr

cfh9epnr2#

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

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

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

px9o7tmv

px9o7tmv3#

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

  1. Jenkins作业分支-env.BRANCH_NAME。它可以与git分支同名,但也可以称为PR-123或类似名称
  2. git分支-env.GIT_BRANCH,这是git中实际的分支名称。
    因此,作业可能具有分支_NAME=PR-123和GIT_BRANCH=my-scm分支名称
cgfeq70w

cgfeq70w4#

Jenkins文档中有一个所有env变量的列表,供您仔细阅读here

htrmnn0y

htrmnn0y5#

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

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

aiazj4mn6#

我发现这个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
    //...
   '

相关问题