使用环境变量将 Jenkins 管道中的其他变量设置为代码
Using env variables to set other variables in Jenkins pipeline as code
我不能在下面的访问阶段使用前面块中设置的环境变量。
pipeline{
agent any
stages{
stage("set env variable"){
steps{
script{
env.city = "Houston"
}
}
}
}
stage("access"){
steps{
sh """
set brf = ${env.city}
echo $brf
"""
}
}
}
}
ERROR: groovy.lang.MissingPropertyException: No such property: brf for class: groovy.lang.Binding
使用 jenkins 声明式管道环境变量的更简单方法是什么?
使用此代码获取变量应该没有任何问题:
stage("access"){
steps{
sh "set brf = ${env.city}"
echo '$brf'
//or
sh "set brf = ${env.city} && echo $brf"
}
}
我想这就是你问的问题,但如果你还有其他疑问,请告诉我。
I cannot use environment variables set in previous blocks in access stage below.
如果仔细查看错误,您会发现 Jenkins 实际上无法访问 brf
,而不是 env.city
。
这里的问题是由 Jenkins 在 sh
块中解释 $var
的方式引起的:
- 如果使用
"double quotes"
,sh "... $var ..."
中的$var
会被解释为Jenkins变量;
- 如果您使用
'single quotes'
,sh '... $var ...'
中的 $var
将被解释为 shell 变量。
由于你的脚本中的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
我不能在下面的访问阶段使用前面块中设置的环境变量。
pipeline{
agent any
stages{
stage("set env variable"){
steps{
script{
env.city = "Houston"
}
}
}
}
stage("access"){
steps{
sh """
set brf = ${env.city}
echo $brf
"""
}
}
}
}
ERROR: groovy.lang.MissingPropertyException: No such property: brf for class: groovy.lang.Binding
使用 jenkins 声明式管道环境变量的更简单方法是什么?
使用此代码获取变量应该没有任何问题:
stage("access"){
steps{
sh "set brf = ${env.city}"
echo '$brf'
//or
sh "set brf = ${env.city} && echo $brf"
}
}
我想这就是你问的问题,但如果你还有其他疑问,请告诉我。
I cannot use environment variables set in previous blocks in access stage below.
如果仔细查看错误,您会发现 Jenkins 实际上无法访问 brf
,而不是 env.city
。
这里的问题是由 Jenkins 在 sh
块中解释 $var
的方式引起的:
- 如果使用
"double quotes"
,sh "... $var ..."
中的$var
会被解释为Jenkins变量; - 如果您使用
'single quotes'
,sh '... $var ...'
中的$var
将被解释为 shell 变量。
由于你的脚本中的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