Jenkins 使用 DSL 将 git 子模块添加到 multibranchPipelineJob

Jenkins add git submodule to multibranchPipelineJob with DSL

我有一个 DSL 脚本来创建我的 Jenkins 管道作业。

String[] repos =
    ['xxx']    

for (int i = 0; i < repos.length; i++) {
    repoName = repos[i];    
    multibranchPipelineJob('PIPELINE-'+repoName) {
        branchSources {
            git {
                remote('git@github.com:yyy/'+repoName+'.git')
                credentialsId('112233445566')
            }
        }
        description ("""<p> <b>generate by DSL - DO NOT CHANGE Manually </b> <p>""")
        triggers {
            periodic(2)
        }
        orphanedItemStrategy {
            discardOldItems {
                numToKeep(0)
                daysToKeep(0)
            }
        }
    }
}

我想添加 附加行为 - 高级子模块行为

内置 DSL 不支持 "Additional Behaviours",但 Automatically Generated DSL 支持:

multibranchPipelineJob('example-mbp2') {
  branchSources {
    branchSource {
      source {
        git {
          id('bbedfd29-5bb0-4c13-b040-0dbd0d19345b')
          remote('https://github.com/jenkinsci/job-dsl-plugin.git')
          traits {
            submoduleOptionTrait {
              extension {
                disableSubmodules(false)
                recursiveSubmodules(true)
                trackingSubmodules(false)
                reference(null)
                timeout(null)
                parentCredentials(true)
              }
            }
          }
        }
      }
    } 
  }
}

这是一个添加子模块标签和分支发现的脚本

multibranchPipelineJob('example') {
  branchSources {    
    branchSource {
      source {        
        git {
          credentialsId('1111-2222-3333')
          remote('git@github.com:xxx/yyyy.git')

          traits {            
            submoduleOptionTrait {
              extension {
                disableSubmodules(false)
                recursiveSubmodules(true)
                trackingSubmodules(false)
                reference(null)
                timeout(null)
                parentCredentials(true)
              }
            }

            cloneOptionTrait {
              extension {
                shallow (false)
                noTags (false)
                reference (null)
                depth(0)
                honorRefspec (false)
                timeout (10)
              }
            }
          }
        }
      }
    } 
  }

  triggers {
            periodic(2)
        }

configure {
      def traits = it / sources / data / 'jenkins.branch.BranchSource' / source / traits
      traits << 'jenkins.plugins.git.traits.BranchDiscoveryTrait' {}
    }  
}