我想统一Jenkins作业生成过程,并希望有一个文件传递给处理作业DSL的步骤。

因此,我可以更改当前DSL版本中包含的文件。说我有这些文件:

..
Release.groovy
FirstPipeline.groovy
SecondPipeline.groovy

我希望Release.groovy既包含两个管道,也可能包含单个管道。

在管道文件中没有类结构,因此我无法导入,就好像它们是一个库一样。它只是这样的:
import mylibs.jobs.UsefulJob1
import mylibs.jobs.UsefulJob2
import mylibs.jobs.FirstPipeline

def firstPipeline = new FirstPipeline()

multiJob(firstPipeline.name) {
  // multijob steps
}

我尝试使用评估,但事实证明,它仅适用于简单脚本。而且,如果将它与更复杂的导入库和元编程层次结构一起使用,它会因难以解释的错误而失败。

最佳答案

对于那些想知道答案的人。最后,我将这些脚本重构为类。在我的情况下,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
    }
  }
}

然后,您可以将它们全部收集到一个文件中:
import pipelines.FirstPipeline
import pipelines.SecondPipeline

new FirstPipeline(this)
new SecondPipeline(this)

10-06 11:25