Manquer quelque chose d'évident. Comment passer une variable d'un script groovy dans une commande Shell? Ceci est dans le contexte d'un fichier Jenkins si c'est important pour la syntaxe.
def COLOR
node('nodename'){
stage ('color') {
COLOR = "green"
echo "color is $COLOR"
sh '''COLOR=${COLOR}
echo $COLOR'''
}
}
Je m'attends à voir le bit Shell imprimer green
, mais je reçois le message suivant;
[Pipeline] echo
color is green
[Pipeline] sh
[job] Running Shell script
+ COLOR=
+ echo
Je dois utiliser la citation triple sur la variable sh
en raison du contenu qui y sera intégré une fois que tout sera réglé.
Vous devez utiliser des guillemets doubles au lieu de simples pour remplacer les expressions dans la chaîne:
def COLOR
node('nodename'){
stage ('color') {
COLOR = "green"
echo "color is $COLOR"
sh """COLOR=${COLOR}
echo $COLOR"""
}
}
Si des guillemets simples doivent être utilisés pour une raison quelconque, essayez de concaténer en utilisant +
:
sh '''COLOR=''' + COLOR + '''
echo ''' + COLOR
Si le code ici est destiné à affecter la valeur de variable groovy ("vert") à la variable d’environnement COLOR, et que echo $COLOR
est destiné à imprimer la variable Shell, le $
doit être échappé pour que le shell puisse le lire ce:
sh """COLOR=${COLOR}
echo \$COLOR"""