web-dev-qa-db-fra.com

Accéder à une variable Groovy à partir de l'étape Shell dans le pipeline Jenkins

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

19
Dirk

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"
28
Dave Bacher

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" 
3
user2481857