Je veux utiliser une variable que j'utilise à l'intérieur de mon script Jenkinsfile
, puis passer sa valeur dans une exécution de script Shell (soit en tant que variable d'environnement ou paramètre de ligne de commande).
Mais le Jenkinsfile
suivant:
for (i in [ 'a', 'b', 'c' ]) {
echo i
sh 'echo "from Shell i=$i"'
}
Donne la sortie:
a
from Shell i=
b
from Shell i=
c
from Shell i=
La sortie souhaitée est quelque chose comme:
a
from Shell i=a
b
from Shell i=b
c
from Shell i=c
Une idée comment passer la valeur de i
au scipt Shell?
Edit: Basé sur Matt's réponse, j'utilise maintenant cette solution:
for (i in [ 'a', 'b', 'c' ]) {
echo i
sh "i=${i}; " + 'echo "from Shell i=$i"'
}
L'avantage est que je n'ai pas besoin d'échapper au "
dans le script Shell.
Votre code utilise une chaîne littérale et par conséquent votre variable Jenkins ne sera pas interpolée à l'intérieur de la commande Shell. Vous devez utiliser "
pour interpoler votre variable à l'intérieur de vos chaînes à l'intérieur du sh
. '
passera juste une chaîne littérale. Nous devons donc apporter quelques modifications ici.
La première consiste à modifier le '
à "
:
for (i in [ 'a', 'b', 'c' ]) {
echo i
sh "echo "from Shell i=$i""
}
Cependant, nous devons maintenant échapper au "
à l'intérieur:
for (i in [ 'a', 'b', 'c' ]) {
echo i
sh "echo \"from Shell i=$i\""
}
De plus, si une variable est ajoutée directement à une chaîne comme vous le faites ci-dessus ($i
sur i=
), nous devons le fermer avec quelques accolades:
for (i in [ 'a', 'b', 'c' ]) {
echo i
sh "echo \"from Shell i=${i}\""
}
Cela vous donnera le comportement que vous désirez.
Extension to Matts answer: Pour les scripts sh multilignes, utilisez
sh """
echo ${paramName}
"""
au lieu de
sh '''...'''
essaye ça:
for (i in [ 'a', 'b', 'c' ]) {
echo i
sh '''
echo "from Shell i=$i"
'''
}