GitHub拉取请求所提出的分支名称

22

我正在Jenkins中使用多分支流水线作业。

如何在GitHub上找到拉取请求所在的分支名称?

我正在使用/github-webhook//ghprbhook/,并尝试了以下环境变量:GIT_LOCAL_BRANCHGIT_BRANCHghprbSourceBranch,但是我没有得到任何结果。

如果有任何建议,我愿意尝试。

5个回答

33

CHANGE_BRANCH 提供了PR源分支的正确名称。

CHANGE_TARGET 提供了PR合并的目标名称。


1
有趣的是,虽然这在多分支管道文档中没有提到,但是branch-api插件中的代码提到了这些内容。 - StephenKing
非PR构建怎么办?我想为我的构建拥有一个单独的Jenkinsfile。那么我是否需要检测CHANGE_BRANCH是否存在,然后假设它不是PR构建? - trusktr
1
@trusktr 如果 CHANGE_BRANCH 存在,那么它意味着这是一个 PR 构建。否则 CHANGE_BRANCH 不存在。 - Jonathan Rioux

4

有几个不同的参数,取决于上下文,找到正确的参数可能会很困难。

BRANCH_NAME

对于多分支项目,它将设置为正在构建的分支的名称,例如,如果您希望从master部署到生产环境但不从功能分支部署,则相应的更改请求的名称通常是任意的(请参阅CHANGE_IDCHANGE_TARGET)。

这可以是分支名称(如分支构建中的名称)或某些其他标识符(如拉取请求ID)。文档明确指出它可以是任何一个,但如果您没有阅读完整的文档,则这是令人惊讶的行为。

MZ2010的另一个答案显示了一种可能作为检查的方法。它可能取决于插件版本,并可能受到上述相同问题的影响。

def scmVars = checkout scm
def branchName = scmVars.GIT_BRANCH

你可以使用支持CHANGE_BRANCH环境变量的GitHub Branch Source Plugin 来获取它。这个功能是在 JENKINS-43418 中添加的,如果您正在使用env.CHANGE_BRANCH,您应该能够引用它。但是,在Multi-branch jobs中可能无法使用。

3
环境变量CHANGE_BRANCH代表源分支名称,CHANGE_TARGET代表目标分支名称。对于来自分支的PR,CHANGE_FORK会给出fork存储库的名称。对于来自原始存储库的PR,CHANGE_FORK未设置。
要查看环境变量的描述,请导航到分支作业,然后选择 Pipeline Syntax > Global Variable Reference > env 。它应该显示这些变量的描述

提到Jenkins链接描述所有可用的环境变量,不错。 - Cristik

0
根据文档,拉取请求的ID作为CHANGE_ID变量公开。
顺便说一下,可以通过env在管道的Groovy代码中访问环境变量,例如env.CHANGE_ID

0

对于多分支流水线,请使用:

env.BRANCH_NAME

用于访问分支名称。

编辑:如果您需要调试环境变量或git变量,可以尝试:

  1. 访问GIT变量

    def scmVars = checkout scm
    def branchName = scmVars.GIT_BRANCH
    
  2. 打印ENV变量

    sh("printenv")
    

8
谢谢您的回复。如果我提交一个 PR 并使用这个命令,我们将得到以 PR 编号为分支名称的结果。 - Sunil Boga
1
这很奇怪。也许你可以尝试打印所有的环境变量和git变量,看看分支名称是否存储在另一个变量中? - bp2010
3
这不奏效。Jenkins 会创建一个名为 PR-XXX 的分支,其中 XXX 是 PR 编号,而这就是在 env.BRANCH_NAME 中显示的内容。但希望它能将 PR 的原始分支名称放入其中! - trusktr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接