确定 Jenkinsfile 是否从多分支管道运行

Determine whether a Jenkinsfile runs from a multibranch pipeline

我有一个多分支管道,运行 是 Jenkinsfile 个 select 个分支。现在我需要 运行 相同的 Jenkinsfile 参数,所以我想我可以使用常规管道。

现在我要做的就是确定我 运行 是否在多分支管道中。我可以检查构建中的任何参数,如果没有任何参数,我可以推断出我在多分支管道中:

def isMultibranchPipeline() {
    !params.any()
}

我正在寻找一种更直接的方法来了解脚本是否 运行 正在多分支管道中,但找不到类似的方法。

通过获取当前的“项目”(这是一个 Jenkins 工作),你可以知道它是否是一个多分支工作,这要归功于它的 class:

import jenkins.model.Jenkins
import org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject

def isMultiBranchPipeline() {
    return Jenkins.get().getItem(currentBuild.projectName) instanceof WorkflowMultiBranchProject
}

如果作业是 PipelineMultiBranchDefaultsProject 之前的方法无效。我是 检查 scm 对象

boolean isMultiBranchPipeline() {
    try {
      if (script.scm)
        return true
    } catch (Exception e) {
      return false
    }
  }