如何在 Jenkins Pipeline 中配置环境变量传递参数

文章导读
在 Jenkins Pipeline 中配置环境变量传递参数,最推荐的方式是在 Declarative Pipeline 中使用 parameters 块定义构建参数,并通过 environment 块或 withEnv 指令注入环境变量。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

在 Jenkins Pipeline 中配置环境变量传递参数,最推荐的方式是在 Declarative Pipeline 中使用 parameters 块定义构建参数,并通过 environment 块或 withEnv 指令注入环境变量。

先说结论:参数化构建适合需要动态调整分支、环境或配置的场景,通过 parameters 定义输入,environment 定义上下文。

  • 适合:Declarative Pipeline 结构,需要用户交互或动态值的构建任务
  • 先看:parameters 块定义参数类型,environment 块定义变量作用域
  • 建议:敏感信息使用 password 类型参数或 Jenkins 凭据管理,避免硬编码

命令速用版

pipeline {
    agent any
    parameters {
        string(name: 'DEPLOY_ENV', defaultValue: 'dev', description: '部署环境')
    }
    environment {
        MY_ENV = "${params.DEPLOY_ENV}"
    }
    stages {
        stage('Build') {
            steps {
                sh 'echo $MY_ENV'
            }
        }
    }
}

为什么会这样

Jenkins Pipeline 区分 Groovy 变量、Pipeline 参数和操作系统环境变量,混用会导致脚本无法读取。

parameters 块定义的变量存储在 params 对象中,仅在 Groovy 上下文直接可用。environment 块定义的变量注入到执行环境,Shell 或 Python 脚本可通过标准环境变量方式读取。def 定义的变量仅是 Groovy 局部变量,无法传递给子进程。

分步处理

第一步:在 Jenkinsfile 顶层定义 parameters 块,声明需要用户输入或动态指定的参数。

第二步:使用 environment 块将 params 参数赋值给环境变量,确保子进程可见。

第三步:在 steps 中使用 sh 或 bat 步骤,通过 $VAR 或 %VAR% 语法引用环境变量。

第四步:若需在 Python 脚本中读取,使用 os.environ 获取对应键值。

怎么验证是否生效

在 Pipeline 步骤中添加 sh 'printenv' 命令,检查输出日志中是否包含自定义变量名及其值。

如何在 Jenkins Pipeline 中配置环境变量传递参数

使用 echo ${params.VAR_NAME} 在 Groovy 插值中打印参数值,确认参数已正确传递到 Pipeline 上下文。

常见坑

环境变量作用域受限:environment 块定义在 stage 内时,仅该 stage 可见,全局变量需定义在 pipeline 层级。

Shell 脚本解析差异:Windows bat 脚本使用 %VAR% 读取环境变量,Linux sh 脚本使用 $VAR,混用会导致获取为空。

def 变量无法传递:使用 def 定义的变量仅在 Groovy 脚本内有效,无法传递给 sh 或 Python 脚本执行。

常见问题

如何在 Python 脚本中获取 Jenkins 参数?

通过 os.environ['VAR_NAME'] 读取,前提是 Jenkins Pipeline 已通过 environment 或 withEnv 将该参数注入环境变量。

password 类型参数会明文显示吗?

不会,password 类型参数在 Jenkins 界面输入时隐藏,且在构建日志中自动掩码,适合传递敏感信息。

params 和 env 对象有什么区别?

params 用于访问 parameters 块定义的构建参数,env 用于访问 environment 块定义的环境变量或系统内置变量。

参考来源

  • jenkins pipeline 执行 python 脚本并传递参数及设置环境变量
  • Jenkins 环境变量终极指南:灵活配置多环境部署参数
  • Jenkins Pipeline 参数传递与动态构建实践
  • Jenkins 全链路教程——Jenkins Pipeline 参数化构建
  • jenkins 变量传递 jenkins pipeline 变量