Ich kann keine Umgebungsvariablen verwenden, die in den vorherigen Blöcken in der folgenden Zugriffsphase festgelegt wurden.
pipeline{
agent any
stages{
stage("set env variable"){
steps{
script{
env.city = "Houston"
}
}
}
}
stage("access"){
steps{
sh """
set brf = ${env.city}
echo $brf
"""
}
}
}
}
FEHLER: groovy.lang.MissingPropertyException: Keine solche Eigenschaft: brf für die Klasse: groovy.lang.Binding
Was ist eine einfachere Möglichkeit, deklarative Pipeline-Umgebungsvariablen von Jenkins zu verwenden?
Ich kann keine Umgebungsvariablen verwenden, die in den vorherigen Blöcken in der folgenden Zugriffsphase festgelegt wurden.
Wenn Sie sich den Fehler genau ansehen, können Sie feststellen, dass Jenkins tatsächlich nicht auf brf
und nicht auf env.city
Zugreifen kann.
Das Problem hier wird durch die Art und Weise verursacht, wie Jenkins $var
Im sh
-Block interpretiert:
"double quotes"
verwenden, wird $var
in sh "... $var ..."
als Jenkins-Variable interpretiert.'single quotes'
verwenden, wird $var
in sh '... $var ...'
als Shell-Variable interpretiert.Da der sh
Code in Ihrem Skript in "double quotes"
Eingeschlossen ist, wird $brf
Als Jenkins-Variable betrachtet, obwohl keine solche Variable definiert ist. Daher tritt der Fehler auf.
Um die Shell-Variable in einem Block mit doppelten Anführungszeichen zu verwenden, fügen Sie \
Vor $
Hinzu:
sh "echo \$var"
funktioniert genauso wie
sh 'echo $var'
Dies sollte Ihr Pipeline-Skript reparieren:
pipeline{
agent any
stages{
stage("set env variable"){
steps{
script{
env.city = "Houston"
}
}
}
stage("access"){
steps{
sh """
brf=${env.city}
echo \$brf
"""
}
}
}
}
Ausgabe aus der Pipeline:
[test] Running Shell script
+ brf=Houston
+ echo Houston
Houston