web-dev-qa-db-fra.com

script groovy - sh avec variable

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é.

6
Alex

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
13
manouti

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"""
1
Amy B Higgins