Using env variables to set other variables in Jenkins pipeline as code Using env variables to set other variables in Jenkins pipeline as code jenkins jenkins

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 in sh "... $var ..." will be interpreted as Jenkins variable;
  • if you use 'single quotes', $var in sh '... $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.