如何检查是否从拉取请求触发了管道

ESG*_*ESG 9 jenkins jenkins-pipeline

我正在使用Jenkins管道使用GitHub Organization插件构建Pull Requests分支.

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

如何检查构建是从PR vs而不是常规分支构建启动的?

Kev*_*ord 11

env 变量CHANGE_ID仅在从 Pull Request 检查触发构建时存在。

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


mpa*_*lov 10

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

if (env.BRANCH_NAME == "master") {
  sh "./publish.sh"
}
Run Code Online (Sandbox Code Playgroud)

其他可能有用的环境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'
Run Code Online (Sandbox Code Playgroud)

  • 我最后检查了分支名称是PR-\d + (6认同)
  • CHANGE_* vars 的文档:https://hudson.eclipse.org/webtools/env-vars.html/ 和“可从 Jenkins Pipeline 中访问的环境变量的完整列表记录在 ${YOUR_JENKINS_URL}/pipeline-syntax/globals #env”每 https://jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables (4认同)
  • 你应该发布@ESG (2认同)

Nag*_*gev 6

要专门检测 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
    } 
  }
Run Code Online (Sandbox Code Playgroud)

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