【问题标题】:GitHub Branch name from which the Pull Request is raised提出拉取请求的 GitHub 分支名称
【发布时间】:2018-05-26 06:35:30
【问题描述】:

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

如何在 GitHub 中找到提出拉取请求的分支名称?

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

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

【问题讨论】:

    标签: github jenkins jenkins-pipeline pull-request multibranch-pipeline


    【解决方案1】:

    根据documentation,拉取请求ID 暴露为CHANGE_ID 变量。

    顺便说一句。环境变量可以通过env在管道的groovy代码中访问,例如env.CHANGE_ID

    【讨论】:

      【解决方案2】:

      对于多分支管道,请使用:

      env.BRANCH_NAME
      

      用于访问分支名称。

      编辑:如果需要调试 env 变量或 git 变量可以尝试:

      1. 访问 GIT 变量

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

        sh("printenv")
        

      【讨论】:

      • 感谢您的回复。如果我提出 PR 并使用此命令,我们将获得 PR 编号作为分支名称。
      • 这很奇怪。也许您可以尝试打印所有 env vars 和 git vars 以查看分支名称是否存储在另一个变量中?
      • 这不起作用。 Jenkins 创建了一个类似PR-XXX 的分支,其中XXX 是PR 编号,这就是env.BRANCH_NAME 中显示的内容。希望它把 PR 的原始分支名称放在那里!
      【解决方案3】:

      有几个不同的参数,根据上下文可能很难找到正确的参数。

      BRANCH_NAME

      对于多分支项目,这将设置为正在构建的分支的名称,例如,如果您希望从 master 但不从功能分支部署到生产环境;如果对应某种变更请求,名称一般是任意的(参考CHANGE_IDCHANGE_TARGET)。

      这可以是分支名称(如分支构建)或其他标识符(如拉取请求 ID)。文档很清楚,它可以是任何一种,但如果您没有阅读完整的文档,这是令人惊讶的行为。

      other answer by MZ2010 显示了一种可能用作结帐的方式。它可能取决于插件版本,并且可能受到与上述相同问题的影响。

      def scmVars = checkout scm
      def branchName = scmVars.GIT_BRANCH
      

      如果您使用支持CHANGE_BRANCH 环境变量的GitHub Branch Source Plugin,您可以获得它的方式。这是在JENKINS-43418 中添加的,如果您使用env.CHANGE_BRANCH,您应该可以参考它。不过,它可能不适用于多分支作业。

      【讨论】:

        【解决方案4】:

        CHANGE_BRANCH 给出了 PR 源分支的正确名称。

        CHANGE_TARGET 给出 PR 合并的目标名称

        【讨论】:

        • 有趣,虽然multibranch pipeline documentation 中没有提到这一点,但branch-api 插件中的代码提到了这些。
        • 非公关版本呢?我想为我的构建提供一个 Jenkinsfile。然后我是否必须检测 CHANGE_BRANCH 是否存在,然后假设它不是 PR 构建?
        • @trusktr 是的,如果 CHANGE_BRANCH 存在,这意味着它是一个 PR 版本。否则 CHANGE_BRANCH 不存在。
        【解决方案5】:

        环境变量CHANGE_BRANCH 应该给你源分支名称和CHANGE_TARGET 目标分支名称。对于来自 fork 的 PR,CHANGE_FORK 为您提供了 fork 的存储库名称。对于来自 origin 的 PR,CHANGE_FORK 未设置。

        要查看环境变量的描述,请导航到分支作业,然后 管道语法 > 全局变量参考 > env。它应该显示the description of those variables

        【讨论】:

        • 很好地提及描述所有可用环境变量的 Jenkins 链接。
        猜你喜欢
        • 2023-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-30
        • 2020-06-25
        • 2022-12-09
        • 1970-01-01
        相关资源
        最近更新 更多