【发布时间】:2018-07-03 15:53:31
【问题描述】:
正如您在 Jenkins 中的 shared libraries 中所知道的,可以在 Jenkinsfile 中调用 vars 文件夹中文件的内容。
例如,在共享库的 vars 文件夹中,我们可以有一个名为 build.groovy 的文件,在 Jenkinsfile 中我们可以通过以下方式调用它:
build {
parameter1 = "some param1"
parameter2 = "some param2"
}
正如this section 中所述。
我在 Jenkinsfile 中使用 groovy 文件并使用 call() 方法调用它们没有问题。
但我想定制一个管道并使其尽可能通用。
所以我想调用一个包含在 vars 文件夹中但在同一管道中的 groovy 文件:在共享库的同一 vars 文件夹中包含的另一个文件中调用 genericStage.groovy。
所以我拥有的是vars 文件夹中的一个 groovy 文件:genericStage.groovy
我所拥有的是:
Pipeline{
agent{label myNode}
stages{
stage("init"){
//steps
}
genericStage{
parameter1 = "some param"
}
}
}
在 genericStage 中:
def call(Closure body) {
def config = [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
body()
stage(config.parameter1){
steps{
//steps
}
}
}
但我得到了错误:
Expected a stage @ line 125, column 6.
genericStage{
^
1 error
at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)
at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1085)
那么如何在同一个共享库中调用 Jenkinsfile 呢?
【问题讨论】:
-
This answer 可能会解决您的问题...
标签: jenkins groovy shared-libraries jenkins-pipeline