À l'aide du plug-in Pipeline dans Jenkins 2.x , comment puis-je accéder à une variable Groovy définie quelque part au niveau de la scène ou du nœud depuis une étape sh
?
Exemple simple:
node {
stage('Test Stage') {
some_var = 'Hello World' // this is Groovy
echo some_var // printing via Groovy works
sh 'echo $some_var' // printing in Shell does not work
}
}
donne ce qui suit sur la page de sortie Jenkins:
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Test Stage)
[Pipeline] echo
Hello World
[Pipeline] sh
[test] Running Shell script
+ echo
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
Comme on peut le constater, echo
dans l'étape sh
imprime une chaîne vide.
Une solution consisterait à définir la variable dans la portée de l’environnement via
env.some_var = 'Hello World'
et l'imprimer via
sh 'echo ${env.some_var}'
Cependant, ce type d’exploitation abuse de la portée environnementale de cette tâche.
Pour utiliser une chaîne pouvant être modélisée, où les variables sont substituées dans une chaîne, utilisez des guillemets doubles.
sh "echo $some_var"
J'ajoute le commentaire de @Pedro comme réponse car je pense que c'est important.
Pour sh env vars nous devons utiliser
sh "echo \$some_var"