Dictionary 如何将映射传递给Jenkins管道全局函数?

Dictionary 如何将映射传递给Jenkins管道全局函数?,dictionary,jenkins,groovy,jenkins-pipeline,Dictionary,Jenkins,Groovy,Jenkins Pipeline,我有一个类似这样的想法: 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 = 'lin

我有一个类似这样的想法:

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"
}
这就是所谓的:

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"
}
正常变量名称正在工作,但传递的映射配置不起作用。可能是因为def config=[:]的缘故吧?如何访问函数中的映射?

映射确实已通过。问题是echo不知道如何处理映射以便在控制台中打印,echo似乎只打印字符串

因此,您可以尝试使用以下代码:

echo config.configure.toString() // prints [os:linux, dir:build]
或使用GString:

或使用println:

问题是Map就在那里,因此您可以访问config.configure.os或config.configure.dir而不会出现问题,请尝试jenkins管道中的以下代码:

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"
}
它在输出控制台中显示以下结果:

地图真的通过了问题是echo不知道如何处理地图以便在控制台中打印似乎echo只打印字符串

因此,您可以尝试使用以下代码:

echo config.configure.toString() // prints [os:linux, dir:build]
或使用GString:

或使用println:

问题是Map就在那里,因此您可以访问config.configure.os或config.configure.dir而不会出现问题,请尝试jenkins管道中的以下代码:

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"
}
它在输出控制台中显示以下结果: