2016-10-19 6 views
0

私はこのようなglobal functionています。このように呼ばれて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 = 'linux-build' 
    configure = [os: 'linux', dir: 'build'] 

    echo "myStep" 
} 

通常の変数(name)に取り組んでいるが、渡されたマップ(configureは)しません。多分それはdef config = [:]のためでしょうか?どのようにして関数内のマップにアクセスできますか?

答えて

2

Mapが問題を実際に渡されますがechoは(echoだけ文字列を出力しているようです)、コンソールに印刷するためにMapに対処する方法がわからないということです。

だから、代わりに次のコードを試すことができます。

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.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 
関連する問題