Jenkins 如何检查管道是否由拉取请求触发

Jenkins 如何检查管道是否由拉取请求触发,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我正在使用Jenkins管道使用GitHub组织插件构建拉请求分支 我可以很好地构建它们,但我希望避免一些步骤(例如发布工件)。检查git的当前分支可以得到PR的目标,因为在尝试构建之前,PR分支正在合并到目标中 如何检查生成是否是从PR而不是常规分支生成启动的?至少在Jenkins 2.16env.branch\u NAME中给出了源分支而不是目标分支。你可以这样做: if (env.BRANCH_NAME == "master") { sh "./publi

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

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


如何检查生成是否是从PR而不是常规分支生成启动的?

至少在Jenkins 2.16
env.branch\u 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'

有关这些和更多的文档:

要专门检测GitHub pull请求,可以使用以下方法:

  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开头的分支,那么这是不可靠的。它的好处是,
脚本
也可以用于
post
而不仅仅是
阶段
,这很有用,因为
post
中不允许使用
时。如果您不关心这一点,那么值得研究
when
指令。有一些来自和带有一些示例的文档。

env变量
CHANGE\u ID
仅在从拉取请求检查触发生成时才存在

对于对应于某种变更请求的多分支项目,如果支持,将设置为变更ID,例如请求编号;否则就没办法了


PRs具有与常规分支不同的环境。此外,您还可以检查当前目录。如果它是PRSo,那么它的名称是PR。我假设运行
sh“set”
可能会给您一些指示。我最后检查了分支名称是否是PR-\d+您应该发布@ESGdocs for CHANGE_*vars:“Jenkins管道中可访问的环境变量的完整列表记录在${YOUR_Jenkins_URL}/管道语法/globals#env“每个您提供的链接()都需要一个帐户。谢谢@Brian,我已将其更新为Doc以获取上述信息-