Jenkins Pipeline Template Catalogue 只建master和main分支

Jenkins Pipeline Template Catalog Only build master and main branches

我正在尝试设置一个只构建主分支和主分支的管道模板目录。

如果我只定义一个分支名称,它会起作用,例如 master 说我想要 NoTriggerBranchProperty 用于所有 not master。我的 template.yaml 文件的相关部分:

multibranch:
  branchSource:
    git:
      remote: '${repo}'
      credentialsId: '${credentialsId}'
    strategy:
      $class: NamedExceptionsBranchPropertyStrategy
      namedExceptions:
        - name: "!master"
          props:
          - $class: NoTriggerBranchProperty
    buildStrategies:
      - $class: SkipInitialBuildOnFirstBranchIndexing

根据 docs 我可以附加名称,所以 !master,!main 应该可以,但它没有。它实际上使所有分支都不会在 SCM 更改时触发。

我更进一步,查看了 Cloudbees here 使用的匹配代码,据我所知 !master,!main 应该可以正常工作。我怀疑我的过程中存在逻辑错误,因为我在使用无触发器 属性.

时试图反转分支名称以触发它们

经过整整8个小时的测试终于解决了这个问题

查看 NamedExceptionsBranchPropertyStrategy 代码,很明显 !main,!master 将不起作用,因为 NamedExceptionsBranchPropertyStrategy.isMatch 用作两个名称的 ||。因此名字,在这个例子中 !main returns true 因为它是匹配的,所以它打破了整个逻辑链。

相反,解决方案是

multibranch:
  branchSource:
    git:
      remote: '${repo}'
      credentialsId: '${credentialsId}'
    strategy:
      $class: NamedExceptionsBranchPropertyStrategy
      namedExceptions:
        - name: "master,main"
      defaultProperties:
        - $class: NoTriggerBranchProperty
    buildStrategies:
      - $class: SkipInitialBuildOnFirstBranchIndexing

基本上默认不触发,除了master和main这两个命名异常。这是支持仅构建特定分支(两个或更多)而不构建其余分支的方式。