【发布时间】:2021-07-07 15:20:59
【问题描述】:
使用Pipeline plugin in Jenkins 2.x,如何从sh 步骤中访问在阶段或节点级别某处定义的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
}
}
在 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
正如我们所见,sh 步骤中的echo 打印一个空字符串。
解决方法是通过
在环境范围内定义变量env.some_var = 'Hello World'
并通过
打印出来sh 'echo ${env.some_var}'
但是,这种方式滥用了该任务的环境范围。
【问题讨论】:
-
不完全是重复的,但我认为使用正确的引号很简单。您链接的页面中给出的示例使用双引号:jenkins.io/doc/book/pipeline/overview/…
-
确实,感谢您指出这一点。应该更仔细地看......当使用双引号时,插值按预期工作。如果您愿意,可以将此添加为答案。