一、参数化构建
1.1 什么是参数化构建?
参数化构建允许在流水线运行时动态传入参数,灵活控制构建行为(如选择分支、指定环境、开关功能等)。无需修改Pipeline脚本即可适配不同场景,大幅提升CI/CD流程的复用性和灵活性。
1.2 常用参数类型及用途
参数类型 |
用途描述 |
示例定义(伪代码) |
string |
文本输入(分支名、版本号) | string(name: 'BRANCH', defaultValue: 'main', description: 'Git分支名') |
booleanParam |
布尔值开关(是否执行测试、dry-run) | booleanParam(name: 'RUN_TEST', defaultValue: true, description: '是否运行测试') |
choice |
预定义选项列表(部署环境、构建模式) | choice(name: 'DEPLOY_ENV', choices: ['dev', 'test', 'prod'], description: '部署环境') |
password |
敏感文本输入(密码、Token,输入时隐藏) | password(name: 'API_TOKEN', description: '接口访问Token') |
text |
多行文本输入(配置文件内容、备注) | text(name: 'CONFIG', defaultValue: 'timeout=30s\nretry=3', description: '构建配置') |
gitParameter |
动态选择Git分支/标签(需安装Git Parameter插件) | gitParameter(name: 'GIT_BRANCH', branchFilter: 'origin/(.*)', description: '选择Git分支') |
1.3 参数作用域与访问方式
-
全局参数(
parameters
块定义):
作用域为整个流水线,通过params.参数名
访问。
✅ 示例:echo "当前分支: ${params.BRANCH}"
-
环境变量参数(
environment
块定义):
注入执行环境,通过env.参数名
或直接$参数名
访问。
✅ 示例:sh "echo 部署环境: $DEPLOY_ENV"
二、动态参数生成
2.1 核心概念
定义:运行时根据实时数据(API接口、文件内容、Git仓库)动态生成参数选项,替代固定choice
参数。
适用场景:
-
自动拉取Git仓库最新分支列表;
-
动态加载可用服务器列表;
-
从配置中心读取版本号选项。
实现方式:依赖 Active Choices插件,通过Groovy脚本生成选项。
2.2 跨任务参数传递
定义:将上游任务的参数/结果传递给下游任务,实现多任务协同。
常见方式:
方法 |
适用场景 |
依赖插件 |
参数化触发插件 |
上游直接触发下游并传递参数 |
Parameterized Trigger |
文件共享 |
传递复杂数据(JSON/XML) |
无(需共享文件系统) |
环境变量 |
传递简单参数(构建号、版本号) |
无 |
三、参数化构建实践
3.1 准备工作
-
确保安装Pipeline插件(默认已安装)。
-
若使用
gitParameter
,需安装Git Parameter插件(插件管理中搜索安装)。
3.2 基础Pipeline示例(含多参数类型)
👇高级玩法,可自行研究
四、动态参数生成
例如:动态获取代码仓库中的代码分支。
4.1 安装插件
-
进入Jenkins → 系统管理 → 插件管理;
-
搜索 Active Choices,安装并重启Jenkins。
4.2 关键说明
-
脚本权限:需在 系统管理 → 全局安全配置 → 脚本安全 中授权执行Git命令脚本。
-
性能优化:添加分支过滤(如
grep 'feature/'
)减少选项数量。
五、跨任务参数传递实践
5.1 参数化触发插件传递
① 安装插件
-
搜索安装 Parameterized Trigger Plugin。
② 上游任务(生成并传递参数)
③ 下游任务(接收参数)
5.2 文件共享传递
① 上游任务:写入参数到共享文件
② 下游任务:读取共享文件解析参数
⚠️ 注意事项
1. 动态参数安全风险
-
禁止在Active Choices脚本中拼接用户输入(如
gitUrl
直接使用用户输入可能导致命令注入)。 - 示例:安全过滤分支
branches.findAll { it ==~ /^(feature|release)\/.*/ } // 仅允许feature/release前缀分支
2. 跨任务传递依赖
-
插件触发:下游任务需开启“参数化构建”,并提前定义接收的参数。
-
文件共享:确保上下游任务运行在同一节点或挂载相同共享目录(如NFS)。
3. 敏感参数处理
- 传递密码/Token时,上游使用
password
类型参数,下游通过Jenkins凭证管理读取:
environment { API_TOKEN = credentials('upstream-api-token') } // 绑定凭证
本文涵盖参数化构建的全流程:从基础参数定义、作用域与访问方式,到动态参数生成(依赖Active Choices插件)和跨任务传递(参数化触发插件/文件共享)。通过灵活运用参数化构建,可大幅提升Jenkins Pipeline的适应性和自动化水平。