Je ne peux pas utiliser les variables d'environnement définies dans les blocs précédents dans l'étape d'accès ci-dessous.
pipeline{
agent any
stages{
stage("set env variable"){
steps{
script{
env.city = "Houston"
}
}
}
}
stage("access"){
steps{
sh """
set brf = ${env.city}
echo $brf
"""
}
}
}
}
ERREUR: groovy.lang.MissingPropertyException: aucune propriété de ce type: brf pour la classe: groovy.lang.Binding
Comment utiliser plus facilement les variables env du pipeline déclaratif jenkins?
Je ne peux pas utiliser les variables d'environnement définies dans les blocs précédents dans l'étape d'accès ci-dessous.
Si vous regardez attentivement l'erreur, vous pouvez voir que Jenkins n'est pas en mesure d'accéder à brf
, pas à env.city
.
Le problème ici est dû à la façon dont Jenkins interprète $var
à l'intérieur sh
bloc:
"double quotes"
, $var
dans sh "... $var ..."
sera interprété comme une variable Jenkins;'single quotes'
, $var
dans sh '... $var ...'
sera interprété comme variable Shell.Étant donné que le code sh
de votre script est entouré de "double quotes"
, $brf
est considéré comme une variable Jenkins, alors qu'aucune variable de ce type n'est définie, l'erreur se produit donc.
Pour utiliser la variable Shell à l'intérieur d'un bloc entre guillemets, ajoutez \
avant $
:
sh "echo \$var"
fonctionne de la même manière que
sh 'echo $var'
Cela devrait corriger votre script de pipeline:
pipeline{
agent any
stages{
stage("set env variable"){
steps{
script{
env.city = "Houston"
}
}
}
stage("access"){
steps{
sh """
brf=${env.city}
echo \$brf
"""
}
}
}
}
Sortie du pipeline:
[test] Running Shell script
+ brf=Houston
+ echo Houston
Houston