我不能在下面的访问阶段使用先前块中设置的环境变量。
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:没有这样的属性:brf for class:groovy.lang.Binding
使用jenkins声明性管道env变量的简单方法是什么?
答案 0 :(得分:13)
我不能在下面的访问阶段使用先前块中设置的环境变量。
如果仔细查看错误,可以看到Jenkins实际上无法访问brf
,而不是env.city
。
这里的问题是由Jenkins解释$var
块内sh
的方式引起的:
"double quotes"
,$var
中的sh "... $var ..."
将被解释为Jenkins变量; 'single quotes'
,$var
中的sh '... $var ...'
将被解释为shell变量。由于脚本中的sh
代码包含在"double quotes"
中,$brf
被认为是Jenkins变量,而没有定义此类变量,因此会发生错误。< / p>
要在双引号块中使用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
答案 1 :(得分:-2)
使用此代码获取变量应该没有任何问题:
stage("access"){
steps{
sh "set brf = ${env.city}"
echo '$brf'
//or
sh "set brf = ${env.city} && echo $brf"
}
}
我认为这就是你所问的问题,但如果你有其他疑问,请告诉我。