我正在尝试创建一个基础工作,以减少我们工作之间的重复。我做了以下工作,但是不起作用:
def baseJob(Map m, Closure c = {}) {
type = m.type ?: 'dev'
pipelineJob("prefix-${m.name}") {
parameters {
stringParam('ONE', 'one', 'Description one')
}
c()
}
}
baseJob(type: 'release', name: 'test') {
parameters { // <-- Fails here
stringParam('TWO', 'two', 'Description two')
}
}
我收到以下错误:
错误:(脚本,第12行)方法的无签名:script.parameters()适用于参数类型:(script $ _run_closure1 $ _closure4)值:[script $ _run_closure1 $ _closure4 @ 18b249b3]
预期的工作如下:
def baseJob(Map m, Closure c = {}) {
type = m.type ?: 'dev'
pipelineJob("prefix-${m.name}") {
parameters {
stringParam('ONE', 'one', 'Description one')
}
parameters { // <-- This is fine
stringParam('TWO', 'two', 'Description two')
}
c()
}
}
baseJob(type: 'release', name: 'test')
所以问题不在于我打过parameters
多次电话。问题似乎是我parameters
从闭包内部调用。
我想相信有一种执行关闭的方法,因此可以parameters
正确调用。但是,我怀疑我必须先了解更多有关Groovy和Jenkins Job DSL的知识,然后才能弄清楚。所以我希望有人知道如何做到这一点。
如果您有替代解决方案来完成可扩展的基础工作,那也是一个有效的答案。
您只需要将要调用的闭包的代理设置为您所在的闭包的代理即可:
def baseJob(Map m, Closure c = {}) {
type = m.type ?: 'dev'
pipelineJob("prefix-${m.name}") {
parameters {
stringParam('ONE', 'one', 'Description one')
}
c.delegate = delegate // <-- Just add this line
c()
}
}
baseJob(type: 'release', name: 'test') {
parameters {
stringParam('TWO', 'two', 'Description two')
}
}
delegate
包含当前正在执行的闭包的委托。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句