2016-10-11 3 views
10

Использование Pipeline plugin in Jenkins 2.x, как я могу получить доступ к переменной Groovy, которая определена где-то на уровне сцены или узла с помощью этапа sh?Доступ к переменной Groovy с шага оболочки в конвейере Jenkins

Простой пример:

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 
    } 
} 

дает следующее на странице вывода Дженкинс:

[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 

Как можно видеть, echo в sh шаге печатает пустую строку.

обходным бы определить переменную в объеме среды через

env.some_var = 'Hello World' 

и распечатать его с помощью

sh 'echo ${env.some_var}' 

Однако, такого рода нарушений окружающей среды области действия для решения этой задачи.

+1

Возможный дубликат [Что разница строк в одинарные или двойные кавычки в заводной?] (Http://stackoverflow.com/questions/6761498/whats-the-difference-of-strings-within-single -или-double-quotes-in-groovy) –

+1

Не совсем дубликат, но я думаю, что просто использовать правильные цитаты. В примерах, приведенных на связанной вами странице, используются двойные кавычки: https://jenkins.io/doc/book/pipeline/overview/#basic-groovy-syntax-for-pipeline-configuration –

+0

Действительно, спасибо, что указали это. Должно было выглядеть более тщательно ... при использовании двойных кавычек интерполяция работает так, как ожидалось. Вы можете добавить это как ответ, если хотите. – Dirk

ответ

10

Чтобы использовать строку templatable, где переменные заменены в строку, используйте двойные кавычки.

sh "echo $some_var" 
Смежные вопросы