如何从分支索引禁用触发器但仍允许在多分支作业中触发 SCM

emm*_*dee 5 jenkins jenkins-pipeline multibranch-pipeline

使用Jenkins 多分支流水线作业时,如果您Suppress Automatic SCM trigger在作业中选择,它将在索引分支后停止构建作业(强大的功能)。

然而,出于某种原因,这也会终止从 SCM 事件触发构建的能力!

有什么方法可以阻止构建在分支发现(分支索引)后触发,但仍然通过 SCM 事件正常构建?

Ada*_*ett 6

您始终可以向管道添加逻辑以在分支索引原因中止。例如:

  boolean isBranchIndexingCause() {
    def isBranchIndexing = false
    if (!currentBuild.rawBuild) {
      return true
    }

    currentBuild.rawBuild.getCauses().each { cause ->
      if (cause instanceof jenkins.branch.BranchIndexingCause) {
        isBranchIndexing = true
      }
    }
    return isBranchIndexing
  }
Run Code Online (Sandbox Code Playgroud)

调整逻辑以适合您的用例。

编辑: Jenkins UI 中嵌入的管道语法 > 全局变量参考(例如<jenkins url>/job/<pipeline job name>/pipeline-syntax/globals:)包含有关 currentBuild 全局变量的信息,这导致了一些 javadoc:

currentBuild 变量属于RunWrapper类型,可用于引用当前正在运行的构建。它具有以下可读属性:

...

原始构建:

带有更多 API的 hudson.model.Run ,仅适用于沙箱外的受信任库或管理员批准的脚本;该值将不可序列化,因此您只能在标记为 @NonCPS 的方法中访问它

...

另见:jenkins.branch.BranchIndexingCause