You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jenkins Pipeline中设置跨后续所有Stage和Step生效的环境变量

Jenkins Pipeline跨Stage共享环境变量最优方案

你原来的写法不生效是因为每个sh步骤都是独立的Shell进程,进程执行完成后上下文就会销毁,所以export的变量无法在其他步骤/Stage中继承。以下是两种成熟的实现方案:

方案1:直接操作全局env对象(单变量场景推荐)

直接将Shell命令的执行结果赋值给Jenkins Pipeline内置的全局env对象,赋值完成后所有后续Stage、所有步骤都可以直接读取该变量,无需额外操作。
完整示例代码:

pipeline {
    agent any
    stages {
        stage('生成全局变量') {
            steps {
                script {
                    // 执行Shell命令获取返回值,trim()用于去除末尾默认带的换行符
                    env.MY_NAME = sh(
                        returnStdout: true,
                        script: 'whoami'
                    ).trim()
                    // 支持任意复杂的Shell命令,如获取目录列表
                    env.FOLDER_CONTENT = sh(
                        returnStdout: true,
                        script: 'ls -lh'
                    ).trim()
                }
            }
        }
        stage('验证变量1') {
            steps {
                sh 'echo "当前用户是 ${MY_NAME}"'
                sh 'echo "目录内容为:\n${FOLDER_CONTENT}"'
            }
        }
        stage('验证变量2') {
            steps {
                sh 'echo "后续Stage也能正常读取:${MY_NAME}"'
            }
        }
    }
}

方案2:批量多变量共享方案

如果需要一次性传递多个变量,可以先将变量写入properties格式的文件,再批量读取赋值给全局env对象,避免逐个赋值的冗余操作:
示例代码:

pipeline {
    agent any
    stages {
        stage('批量生成全局变量') {
            steps {
                // 写入所有需要共享的变量到properties文件
                sh '''
                echo MY_NAME=$(whoami) > .pipeline_env
                echo FOLDER_CONTENT=$(ls -lh) >> .pipeline_env
                echo BUILD_TIME=$(date +%Y-%m-%d_%H:%M) >> .pipeline_env
                '''
                script {
                    // 读取properties文件批量赋值给全局env
                    def envProps = readProperties file: '.pipeline_env'
                    envProps.each { key, value ->
                        env[key] = value
                    }
                }
            }
        }
        stage('验证批量变量') {
            steps {
                sh 'echo "用户:${MY_NAME}"'
                sh 'echo "构建时间:${BUILD_TIME}"'
            }
        }
    }
}

注意事项

  • 两种方案都支持跨agent节点的Pipeline,env对象的值存储在Jenkins master层面,不同节点的Stage都可以正常读取
  • 变量赋值时务必添加.trim()去除Shell返回值末尾的换行符,避免后续使用时出现格式错误
  • 敏感类变量(如密码、密钥)不要直接存入普通env变量,可配合Jenkins凭证管理能力做脱敏处理

内容的提问来源于stack exchange,提问作者Vladimirf7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 13:18:02