使用env变量将Jenkins管道中的其他变量设置为代码
我不能在下面的访问阶段中使用前面的块中设置的环境变量使用env变量将Jenkins管道中的其他变量设置为代码,jenkins,groovy,jenkins-pipeline,jenkins-job-dsl,Jenkins,Groovy,Jenkins Pipeline,Jenkins Job Dsl,我不能在下面的访问阶段中使用前面的块中设置的环境变量 pipeline{ agent any stages{ stage("set env variable"){ steps{ script{ env.city = "Houston" } } } } stage("access"){ steps{ sh ""
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:类:groovy.lang.Binding没有这样的属性:brf
使用jenkins声明性管道环境变量的更简单方法是什么?使用以下代码获取变量应该不会有任何问题:
stage("access"){
steps{
sh "set brf = ${env.city}"
echo '$brf'
//or
sh "set brf = ${env.city} && echo $brf"
}
}
我想这是你问的,但如果你还有疑问,请告诉我
我不能在下面的访问阶段中使用前面的块中设置的环境变量
pipeline{
agent any
stages{
stage("set env variable"){
steps{
script{
env.city = "Houston"
}
}
}
}
stage("access"){
steps{
sh """
set brf = ${env.city}
echo $brf
"""
}
}
}
}
如果仔细查看错误,您会发现詹金斯实际上无法访问brf
,而不是env.city
这里的问题是由Jenkins在sh
块中解释$var
的方式引起的:
- 如果使用
,“双引号”
将被解释为Jenkins变量李>sh中的
“…$var…”$var
- 如果您在
将被解释为shell变量sh'中使用
,“单引号”
$var…“$var
sh
代码用双引号“
包装,$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
这似乎是
csh
(C shell)代码,而不是更标准的sh
(Bourne shell/dash)或bash
。我认为示例的第一部分不起作用,因为brf
变量是在shell进程中设置的,而Jenkins内置的echo
无法访问该变量。如果在管道{environment{city=“Houston..中设置该变量,则sh'echo$city'和sh'echo$city'都会起作用(Jenkins 2.150)在Jenkins中混合shell和groovy变量时的惊人解释。这节省了我的时间。谢谢。如果使用sh“”代码,我们可以在shell之外访问变量brf吗"?我尝试过做同样的事情,它按预期工作,但只有当我尝试从不同阶段访问该变量时,它才无法找到它,即使我将其设置为env变量。有人知道吗?谢谢你对引号和双引号的解释…非常非常非常important@honorius非常简单的问题如果我们想访问ss单引号内的jenkins变量是否有方法也可以逃避?