我正在尝试创建一个JobGenerator类,该类将把构建步骤传递给调用实例。我遇到一个问题,如果尝试运行此错误时出现此错误:
hudson.remoting.ProxyException:groovy.lang.MissingMethodException:方法的无签名:org.jenkinsci.plugins.workflow.cps.CpsClosure2.build()适用于参数类型:(java.util.LinkedHashMap)值: [[job:FooJob]]
class BuildGenerator implements Serializable {
static def generateJob() {
return [
"TestJob",
{ ->
build(
job: 'FooJob'
)
},
]
}
}
node(){
def tasks = [:]
def label
def task
stage("Build") {
def generator = new BuildGenerator()
tasks["Testing"] = generator.generateJob()[1]
parallel tasks
}
}
如果我在类外删除了generateJob函数,那么它将正常工作。我在这里关闭有什么错吗?我是groovy / jenkins世界的新手。
答案 0 :(得分:1)
嗯,这就是Groovy / Jenkins管道的工作方式。 build
内部的node
是其余步骤和功能。如果您希望访问它们,则必须像这样将CPS实例传递给方法(或使用构造函数仅将实例传递一次):
class BuildGenerator implements Serializable {
static def generateJob(script) {
return [
"TestJob",
{ ->
script.build(
job: 'FooJob'
)
},
]
}
}
node(){
def tasks = [:]
def label
def task
stage("Build") {
def generator = new BuildGenerator()
tasks["Testing"] = generator.generateJob(this)[1]
parallel tasks
}
}