如何确定一个分支是否是jenkins文件中的默认分支?

z9ju0rcb  于 2022-12-17  发布在  Jenkins
关注(0)|答案(3)|浏览(197)

我们有一个多分支管道在Jenkins。
我知道你可以检查一个分支是否与名称匹配。

when {
    branch "master"
}

不幸的是,我们的默认分支没有命名为master,并且默认分支的名称会定期更改。
有没有一种方法可以在不检查名称的情况下检查给定的分支是否是默认分支?

when {
    branch is default
}

或者类似的东西
先谢了!

ltqd579y

ltqd579y1#

git ls-remote -q --symref | head -1

这是Gitlab & co使用Remote HEAD来标记“默认分支”的一个变通方法,我们可以使用“git ls-remote -q --symref”来获取远程引用。
远程头将是第一行,所以我们可以选择管道头为-1的第一行。这给了我们“默认分支”的哈希。

rta7y2nd

rta7y2nd2#

自分支API插件版本2.6.4(5月发布)以来,Jenkins多分支管道现在可以访问BRANCH_IS_PRIMARY环境变量:
对于一个多分支项目,如果SCM源报告正在构建的分支是一个主分支,则将其设置为"true";否则不设置。
这意味着您现在可以改为执行以下操作:

when {
    expression { env.BRANCH_IS_PRIMARY }
}

请注意,您必须将其作为env的属性访问,或者使用字符串插值(即“$分支_IS_PRIMARY”),因为BRANCH_IS_PRIMARY可能未设置(参见讨论)。

7hiiyaii

7hiiyaii3#

您可以使用SCR的API来获取默认分支。根据您使用的SCR,对API的调用将有所不同。
在GitLab中,您可以查询API,在响应中,您将找到包含此信息的default_branch字段
GET /projects/:id
在GitHub中,你可以查询Repositories REST API,在响应中你会发现一个包含此信息的default_branch字段。
GET /repos/:owner/:repo
注意GitHub响应,因为它包含3个名为default_branch的字段,一个用于实际的存储库,一个用于父存储库,最后一个用于源存储库,您要查找json根目录下的字段,也就是您要查询的存储库的字段。

相关问题