Jenkins 声明式管道在 post 阶段获取环境变量

Jenkins declarative pipeline get environment variable at post stage

我在构建阶段获取运行时值,该值存储在环境变量中。我将其保存到 WORKSPACE 下的 env.cfg 文件中。

现在我试图在 post 管道步骤中获取该值以用于电子邮件通信。我尝试了加载方法,但它没有用

有什么帮助吗?

post { 总是 { echo $SNAPSHOT //这总是空的 } }

这是您可以跨管道访问环境变量的方式

pipeline {
    agent any;
    environment {
        MESSAGE="Hello World"
    }
    stages {
        stage('one') {
            steps {
                echo "${env.MESSAGE}"
                sh "echo $MESSAGE"
                script {
                    print env.MESSAGE
                }
            }
        }
    }
    post {
        success {
            echo "${env.MESSAGE}"
            script {
                print env.MESSAGE
            }
        }
        failure {
            echo "${env.MESSAGE}"
            script {
                print env.MESSAGE
            }
        }
    }
}

但根据您的情况,假设我有一个名为 .env 的文件,其中包含当前 Jenkins 作业 WORKSPACE 中的以下内容,我想在管道中读取并创建此 env 变量。

.env

export SNAPSHOT=1.0.0
export MESSAGE='Hello World'
export MESSAGE_FROM_ENV_FILE='Hello From .env file'

您的管道应该看起来像

脚本化管道

node {
    stage('one') {
        sh """
          source $WORKSPACE/.env
          
          echo $SNAPSHOT
          echo $MESSAGE
          echo $MESSAGE_FROM_ENV_FILE
        """
        
    }
}

声明式管道

pipeline {
    agent any;
    stages {
        stage('build') {
            steps {
                sh """
                  source $WORKSPACE/.env
          
                  echo $SNAPSHOT
                  echo $MESSAGE
                  echo $MESSAGE_FROM_ENV_FILE
                """
            }
        }
    }
    post {
        success {
            sh """
                  source $WORKSPACE/.env
          
                  echo $SNAPSHOT
                  echo $MESSAGE
                  echo $MESSAGE_FROM_ENV_FILE
            """
        }
    }
    
}

您需要一个全局变量:

SNAPSHOT = ""
println "SNAPSHOT is ${SNAPSHOT}"

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                script {
                    println "SNAPSHOT is ${SNAPSHOT}"
                    SNAPSHOT = "Modified"
                    println "SNAPSHOT is now ${SNAPSHOT}"
                }
            }
        }
    }
    post {
        always {
            echo "${SNAPSHOT}"
        }
    }
}