2016-10-11 88 views
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 

如可以看到的,echosh步骤打印一个空字符串。

一个变通办法是通过

env.some_var = 'Hello World' 

定义的环境范围的变量,并通过

sh 'echo ${env.some_var}' 

然而,这种滥用此任务的环境范围内打印。

+1

的可能的复制[什么是在常规单或双引号中的字符串的区别?(http://stackoverflow.com/questions/6761498/whats-the-difference-of-strings-within-single或双引号在groovy) –

+1

不完全重复,但我认为这是一个简单的问题,使用正确的引号。在您链接的页面中给出的示例使用双引号:https://jenkins.io/doc/book/pipeline/overview/#basic-groovy-syntax-for-pipeline-configuration –

+0

确实,感谢您指出这一点。应该仔细看看......使用双引号时,插值按预期工作。如果你愿意,你可以添加这个答案。 – Dirk

回答

10

要使用模板化字符串,其中将变量替换为字符串,请使用双引号。

sh "echo $some_var" 
相关问题