Using env variables to set other variables in Jenkins pipeline as code
I cannot use environment variables set in previous blocks in access stage below.
If you look closely at the error, you can see Jenkins is actually unable to access brf
, not env.city
.
The issue here is caused by the way Jenkins interprets $var
inside sh
block:
- if you use
"double quotes"
,$var
insh "... $var ..."
will be interpreted as Jenkins variable; - if you use
'single quotes'
,$var
insh '... $var ...'
will be interpreted as shell variable.
Since the sh
code in your script is wrapped in "double quotes"
, $brf
is considered to be a Jenkins variable, while there is no such variable defined, therefore the error occurs.
To use shell variable inside double-quoted block add \
before $
:
sh "echo \$var"
works the same way as
sh 'echo $var'
This should fix your pipeline script:
pipeline{ agent any stages{ stage("set env variable"){ steps{ script{ env.city = "Houston" } } } stage("access"){ steps{ sh """ brf=${env.city} echo \$brf """ } } }}
Output from the pipeline:
[test] Running shell script+ brf=Houston+ echo HoustonHouston
You should not have any problem to get the variables with this code:
stage("access"){ steps{ sh "set brf = ${env.city}" echo '$brf' //or sh "set brf = ${env.city} && echo $brf" } }
I think this is what you had asked but let me know if you have another doubt.