我想统一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)