2016-10-19 7 views
0

Ich habe eine global function wie folgt aus:Wie eine Karte an eine Jenkins Pipeline globale Funktion übergeben?

def myStep(Closure body) { 
    def config = [:] 
    body.resolveStrategy = Closure.DELEGATE_FIRST 
    body.delegate = config 

    body() 

    echo config.name  // works 
    echo config.configure // is null 
} 

die wie folgt aufgerufen:

myStep { 
    name = 'linux-build' 
    configure = [os: 'linux', dir: 'build'] 

    echo "myStep" 
} 

Normale Variablen (name) arbeiten, aber die übergebene Karte (configure) nicht. Vielleicht ist das wegen def config = [:]? Wie kann ich auf die Karte innerhalb der Funktion zugreifen?

Antwort

2

Die Map ist wirklich das Problem bestanden, dass echo wissen nicht, wie mit Map zu behandeln, um in der Konsole zu drucken (scheint, dass echo nur String druckt).

So können Sie mit dem Follow-Code versuchen Sie stattdessen:

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

Oder GString mit:

echo "${config.configure}" // prints [os:linux, dir:build] 

Oder println mit:

println config.configure // prints {os=linux, dir=build} 

Also die Sache ist, dass Map ist Dort können Sie aufzugreifenoder config.configure.dir ohne Probleme, versuchen Sie mit der Folge Code in der jenkins-Pipeline:

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" 
} 

Es zeigt die Folge Ergebnis in der Ausgabekonsole:

[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 
Verwandte Themen