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}"
}
}
}
我在构建阶段获取运行时值,该值存储在环境变量中。我将其保存到 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}"
}
}
}