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

问题描述 投票:1回答:1

我有以下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阶段获取版本,当然我可以在主管道中定义,但是你可以看到我在其中一个阶段得到变量值,所以这对我不起作用。

有没有其他方法,我可以访问阶段之外的版本环境变量?

jenkins groovy jenkins-pipeline jenkins-groovy
1个回答
1
投票

environment阶段内的Fetch version区块仅将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"
                }
            }
        }
    }
}

你也可以使用简写版本并为version而不是env.version赋值,但这是一个隐式绑定,并使其显式使你的意图更直接。值得一提的另一件事 - 当你想正确插入$version变量时使用双引号。单引号将按原样打印文本。

© www.soinside.com 2019 - 2024. All rights reserved.