Vladimirf7
Vladimirf7

Reputation: 81

Set environment variable from Jenkins Pipeline

I'd like to set an env variable in one Stage and have it available in all subsequent Stages and Steps. Something like this:

pipeline {
    stages {
        stage('One') {
            steps {
                sh 'export MY_NAME=$(whoami)'
            }
        }
        stage('Two') {
            steps {
                sh 'echo "I am ${MY_NAME}"'
            }
        }
        stage('Three') {
            steps {
                sh 'echo "I am ${MY_NAME}"'
            }
        }
    }
}

Those sh steps seem to be independent of each other, and the exported var is not preserved even for the next Step, let alone Stage.

One way I can think of is to write the var to a shell file, like echo "FOLDER_CONTENT=$(ls -lh)" and then source it a next Step, but again, I'll have to do the sourcing in every next Step, which is suboptimal.

Is there a better way to do that?

Upvotes: 0

Views: 328

Answers (1)

Vladimirf7
Vladimirf7

Reputation: 81

Finally was able to achieve it like so:

pipeline {
    stages {
        stage('One') {
            steps {
                script {
                    env.MY_NAME= sh (
                        script: 'whoami',
                        returnStdout: true
                    ).trim()
                }
            }
        }
        stage('Two') {
            steps {
                echo "I am ${MY_NAME}"
            }
        }
        stage('Three') {
            steps {
                sh 'echo "I am ${MY_NAME}"'
            }
        }
    }
}

Upvotes: 2

Related Questions