我有global function这样:
def myStep(Closure body) {
def config = [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
body()
echo config.name // works
echo config.configure // is null
}
这就是这样称呼的:
myStep {
name = 'linux-build'
configure = [os: 'linux', dir: 'build']
echo "myStep"
}
正常变量(name
)正在运行,但传递的地图(configure
)却没有。也许那是因为def config = [:]
?如何访问函数内的地图?
答案 0 :(得分:3)
Map
确实通过了问题,echo
不知道如何处理Map
以便在控制台中打印(似乎{{1}只打印字符串)。
因此,您可以尝试使用以下代码:
echo
或使用echo config.configure.toString() // prints [os:linux, dir:build]
:
GString
或使用echo "${config.configure}" // prints [os:linux, dir:build]
:
println
所以问题就在于println config.configure // prints {os=linux, dir=build}
,因此您可以毫无问题地访问Map
或config.configure.os
,请尝试使用jenkins管道中的以下代码:
config.configure.dir
它在输出控制台中显示以下结果:
def myStep(Closure body) {
def config = [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
body()
echo config.name // works
echo config.configure.os // prints linux
echo config.configure.dir // prints buid
println config.configure // prints {os=linux, dir=build}
}
myStep {
name = 'linux-build'
configure = [os: 'linux', dir: 'build']
echo "myStep"
}