我无法使用下面的访问阶段的以前块中设置的环境变量。
pipeline{
agent any
stages{
stage("set env variable"){
steps{
script{
env.city = "Houston"
}
}
}
}
stage("access"){
steps{
sh """
set brf = ${env.city}
echo $brf
"""
}
}
}
}
错误:groovy.lang.missingpropertyexception:no这样的属性:brf for class:groovy.lang.binding
什么是使用Jenkins声明管道Env变量的更轻松的方法?
我无法使用下面访问阶段的以前块中设置的环境变量。
如果您仔细观察错误,您可以看到Jenkins实际上无法访问brf
,而不是env.city
。
这里的问题是由詹金斯(Jenkins)在sh
内部解释$var
的方式引起的:
- 如果您使用
"double quotes"
,则sh "... $var ..."
中的$var
将被解释为Jenkins变量; - 如果您使用
'single quotes'
,则sh '... $var ...'
中的$var
将被解释为壳变量。
由于脚本中的sh
代码包裹在"double quotes"
中,因此$brf
被认为是Jenkins变量,而没有此类变量定义,因此发生了错误。
在$
之前使用双引号内添加的shell变量:
sh "echo $var"
的工作方式与
相同sh 'echo $var'
这应该修复您的管道脚本:
pipeline{
agent any
stages{
stage("set env variable"){
steps{
script{
env.city = "Houston"
}
}
}
stage("access"){
steps{
sh """
brf=${env.city}
echo $brf
"""
}
}
}
}
管道输出:
[test] Running shell script
+ brf=Houston
+ echo Houston
Houston
您不应该有任何问题来获得此代码的变量:
stage("access"){
steps{
sh "set brf = ${env.city}"
echo '$brf'
//or
sh "set brf = ${env.city} && echo $brf"
}
}
我认为这是您问的,但让我知道您是否有疑问。