gpt4 book ai didi

jenkins - 如何在 Jenkins Job DSL 中创建可扩展的基础作业?

转载 作者:行者123 更新时间:2023-12-02 15:16:39 28 4
gpt4 key购买 nike

我正在尝试创建一个基础工作,以减少我们工作之间的重复。我执行了以下操作,但不起作用:

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')
}
}

我收到以下错误:

ERROR: (script, line 12) No signature of method: script.parameters() is applicable for argument types: (script$_run_closure1$_closure4) values: [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。然而,我怀疑在我能够弄清楚之前,我必须学习更多关于 Groovy 和 Jenkins Job DSL 的知识。所以我希望有人知道如何做到这一点。

如果您有替代解决方案来完成可扩展的基础工作,这也是一个有效的答案。

最佳答案

Answer : The method parameters is not implemented inside your script. It was actually implemented inside the pipeline Closure delegate class.

这段代码可以帮助您了解那里发生的事情......

class Test {
void printMe()
{
println "I am in test"
}
}

void test(Closure cl)
{
Test t = new Test()
cl.delegate = t
cl()
}

def callMe = { printMe()}
test {
printMe() // This will run
callMe() // This will fail
}

就您而言:管道(字符串arg,闭包pipeLineClosure)

pipeLineClosure 已在类 X 中实现,其中可以找到 parameters 方法。就像下面的代码所示,

class X
{
...
parameters (Closure cl)
}

所以可能的实现可能是:

class Custom{
String val1
String val2
String val3
}

def baseJob(Map m, List<Custom> l) {
type = m.type ?: 'dev'
pipelineJob("prefix-${m.name}") {
l.each{v->
parameters {
stringParam(v.val1, v.val2, v.val3)
}
}
}
}

List l = []
l.add new Custom(val1: 'ONE', val2: 'one', val3: 'description')
// can be add more values
baseJob(type: 'release', name: 'test', l)

希望有帮助

关于jenkins - 如何在 Jenkins Job DSL 中创建可扩展的基础作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56872330/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com