从 Jenkinsfile 的另一个阶段调用环境变量

Call environment variable from another stage in Jenkinsfile

我有以下 Jenkins 文件。

pipeline {
    agent any
    stages {
        stage('Generate script') {
            steps {
                script {
                    sh 'sh generate_version.sh new_version.log'
                }
            }
        }

        stage('Fetch version') {
            environment {
                version = sh(returnStdout: true, script: '''sh grep version: ''').trim()
            }
            steps {
                script {
                    sh 'echo "do something: $version"'
                }
            }
        }

        stage('use the version') {
            steps {
                script {
                    sh 'echo $version'
                }
            }
        }
    }
}

我无法在第 3 阶段获取版本,当然我可以在主管道中定义,但如您所见,我在其中一个阶段获取变量值,因此这不适用于我。

有没有其他方法,我可以在舞台外访问 version 环境变量?

Fetch version 阶段内的 environment 块将 env.version 变量的范围限制在这个阶段。但是,如果你想在一个阶段在环境变量中存储一个值,并在下一阶段访问这个变量,你必须在 script 块内分配它,例如:

pipeline {
    agent any
    stages {
        stage('Generate script') {
            steps {
                script {
                    sh 'sh generate_version.sh new_version.log'
                }
            }
        }

        stage('Fetch version') {
            steps {
                script {
                    // here we create `env.version` variable that can be access in the later stages
                    env.version = sh(returnStdout: true, script: '''sh grep version: ''').trim()
                    sh 'echo "do something: $version"'
                }
            }
        }

        stage('use the version') {
            steps {
                script {
                    sh "echo $version"
                }
            }
        }
    }
}

您还可以使用 shorthand 版本并将值分配给 version 而不是 env.version,但这是一个隐式绑定,使其显式化会使您的意图更加明确直截了当。另一件值得一提的事情——当你想正确插入 $version 变量时使用双引号。单引号将按原样打印文本。