Jenkins:将多个 DSL 文件合二为一

Mis*_*rev 6 groovy jenkins jenkins-job-dsl

我想统一 Jenkins 作业生成过程,并希望将一个文件传递给Process Job DSLs步骤。

所以我可以改变当前版本的 DSL 中包含的文件。假设我有这些文件:

..
Release.groovy
FirstPipeline.groovy
SecondPipeline.groovy
Run Code Online (Sandbox Code Playgroud)

我希望 Release.groovy 包含两个管道或可能只是单个管道。

管道文件内部没有 Class 结构,所以我不能像导入库一样导入它们。它只是这样的:

import mylibs.jobs.UsefulJob1
import mylibs.jobs.UsefulJob2 
import mylibs.jobs.FirstPipeline

def firstPipeline = new FirstPipeline()

multiJob(firstPipeline.name) {
  // multijob steps
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用评估,但结果证明它仅适用于简单的脚本。如果您将它与更复杂的导入库层次结构和元编程一起使用,它会失败并出现几乎无法解释的错误。

Mis*_*rev 5

对于那些想知道答案是什么的人。我最终将这些脚本重构为类。就我而言,firstPipeline看起来像这样:

package pipelines

import mylibs.jobs.UsefulJob1
import mylibs.jobs.UsefulJob2 

import javaposse.jobdsl.dsl.DslFactory

class FirstPipeline {

  public FirstPipeline(DslFactory dslFactory) {
    dslFactory.multiJob('first_pipeline') {
      // multijob steps
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以将它们全部收集到一个文件中:

import pipelines.FirstPipeline
import pipelines.SecondPipeline

new FirstPipeline(this)
new SecondPipeline(this)
Run Code Online (Sandbox Code Playgroud)