【问题标题】:How to check if a pipeline is triggered from a pull request如何检查是否从拉取请求触发了管道
【发布时间】:2021-04-10 08:54:41
【问题描述】:

我正在使用 Jenkins 管道通过 GitHub 组织插件构建拉取请求分支。

我可以很好地构建它们,但我想避免一些步骤(例如发布工件)。检查 git 的当前分支给了我 PR 的目标,因为 PR 分支在尝试构建之前被合并到目标中。

如何检查构建是从 PR 启动还是从常规分支构建启动?

【问题讨论】:

  • PR 的 env 与常规分支不同。另外,您可以检查当前目录。如果是 PR,则在其中包含名称 PR
  • 所以我假设运行 sh "set" 可能会给你一些指标..

标签: jenkins jenkins-pipeline


【解决方案1】:

至少在 Jenkins 2.16 env.BRANCH_NAME 上提供源分支而不是目标分支。你可以这样做:

if (env.BRANCH_NAME == "master") {
  sh "./publish.sh"
}

其他可能有用的环境变量是CHANGE_* 变量。例如,

CHANGE_AUTHOR='me'
CHANGE_ID='6'
CHANGE_TARGET='master'
CHANGE_TITLE='Update README.md'
CHANGE_URL='https://github.com/test-org/test-repo/pull/6'

有关这些和更多的文档:https://ci.eclipse.org/webtools/env-vars.html/

【讨论】:

【解决方案2】:

环境变量CHANGE_ID 仅在从拉取请求检查触发构建时存在。

对于与某种变更请求对应的多分支项目,如果支持,这将设置为变更 ID,例如拉取请求编号;否则未设置。

【讨论】:

【解决方案3】:

要专门检测 GitHub 拉取请求,可以使用:

  script {
    if (env.BRANCH_NAME == 'master') {
      sh 'make'
    } else if (env.BRANCH_NAME.startsWith('PR')) {
      // do actions for pull request
    } else {
      // some other branch
    } 
  }

当然,如果您希望在您的主存储库上拥有以 PR 开头的分支,这将是不可靠的。它的好处是script 也可以在post 中使用,而不仅仅是stages,这很有用,因为when 不允许在post 中使用。如果您不关心这一点,那么值得研究 when 指令。 CloudbeesJenkins 提供了一些文档以及一些示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 2018-05-11
    • 1970-01-01
    • 2022-07-22
    • 1970-01-01
    相关资源
    最近更新 更多