10
使用Pipeline plugin in Jenkins 2.x,如何访问在sh
步骤中在阶段或节点级别某处定义的Groovy变量?从Jenkins流水线中的shell步骤中访问Groovy变量
简单的例子:
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}'
然而,这种滥用此任务的环境范围内打印。
的可能的复制[什么是在常规单或双引号中的字符串的区别?(http://stackoverflow.com/questions/6761498/whats-the-difference-of-strings-within-single或双引号在groovy) –
不完全重复,但我认为这是一个简单的问题,使用正确的引号。在您链接的页面中给出的示例使用双引号:https://jenkins.io/doc/book/pipeline/overview/#basic-groovy-syntax-for-pipeline-configuration –
确实,感谢您指出这一点。应该仔细看看......使用双引号时,插值按预期工作。如果你愿意,你可以添加这个答案。 – Dirk