如何将地图传递给Jenkins管道全局函数?

时间:2016-10-19 16:06:26

标签: dictionary jenkins groovy jenkins-pipeline

我有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 = [:]?如何访问函数内的地图?

1 个答案:

答案 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} ,因此您可以毫无问题地访问Mapconfig.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"
}