2016-10-19 49 views
0

我有一個global function這樣的:如何將地圖傳遞給Jenkins管道全局函數?

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 = [:]?我如何訪問函數內的地圖?

回答

2

Map真的過去了,問題是echo不知道如何才能在控制檯打印處理Map(似乎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.osconfig.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" 
} 

它顯示了輸出控制檯後續結果:

[Pipeline] echo 
myStep 
[Pipeline] echo 
linux-build 
[Pipeline] echo 
linux 
[Pipeline] echo 
build 
[Pipeline] echo 
{os=linux, dir=build} 
[Pipeline] End of Pipeline 
Finished: SUCCESS 
相關問題