web-dev-qa-db-ger.com

Greifen Sie im Shell-Schritt in der Jenkins-Pipeline auf eine Groovy-Variable zu

Wie kann ich mit dem Plugin Pipeline in Jenkins 2.x auf eine Groovy-Variable zugreifen, die irgendwo auf Stufe- oder Knotenebene innerhalb eines sh-Schritts definiert ist?

Einfaches Beispiel:

node {
    stage('Test Stage') {
        some_var = 'Hello World' // this is Groovy
        echo some_var // printing via Groovy works
        sh 'echo $some_var' // printing in Shell does not work
    }
}

gibt auf der Jenkins-Ausgabeseite Folgendes aus:

[Pipeline] {
[Pipeline] stage
[Pipeline] { (Test Stage)
[Pipeline] echo
Hello World
[Pipeline] sh
[test] Running Shell script
+ echo

[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

Wie man sehen kann, gibt echo im Schritt sh eine leere Zeichenfolge aus.

Ein Workaround wäre, die Variable im Umgebungsbereich über zu definieren 

env.some_var = 'Hello World'

und drucken Sie es über

sh 'echo ${env.some_var}'

Diese Art missbraucht jedoch den Umweltbereich für diese Aufgabe.

19
Dirk

Verwenden Sie doppelte Anführungszeichen, um eine vorzeichenbare Zeichenfolge zu verwenden, bei der Variablen in eine Zeichenfolge eingesetzt werden. 

sh "echo $some_var"
28
Dave Bacher

Ich füge den Kommentar von @Pedro als Antwort hinzu, weil ich es für wichtig halte.

Für die Umwelt müssen wir verwenden

sh "echo \$some_var" 
3
user2481857