主题
一、Jenkins 动态参数化构建插件使用手册
1.1 插件简介
Active Choices 是 Jenkins 的动态参数化构建插件,支持通过 Groovy 脚本实现参数的动态生成、级联更新和交互式交互。 通过选择参数的方式,可以讲多个JOB合并在一个JOB中。
- 动态性:参数值可基于环境变量、外部脚本或用户输入实时生成
- 级联联动:参数间可设置依赖关系实现智能更新
- 多形态呈现:支持下拉框、复选框、单选按钮及 HTML 控件
1.2 插件安装
- 官方地址: https://plugins.jenkins.io/uno-choice
- 安装方式: 系统管理 -> 管理插件 -> 可选插件 -> Active Choices -> 直接安装
1.3 Active Choices 插件三种参数类型
- 主动选择参数 (Active Choices Parameter)
- 主动选择反应参数 (Active Choices Reactive Parameter)
- 主动选择反应引用参数 (Active Choices Reactive Reference Parameter)
👇下面我会从插件的使用上去讲解这三种参数类型的区别
1.4 插件使用
1.4.1 自由风格项目中使用
- 创建一个自由风格项目
在JOb中的参数化配置中看到一些新增了一些参数类型
1.4.1.1 主动选择参数 (Active Choices Parameter)
- 定义:通过 Groovy 脚本动态生成参数选项,支持
多选/单选/复选框
- 配置步骤:
- 勾选参数化构建 → 添加参数 → 选择 Active Choices Parameter
- 配置参数名称、描述、脚本类型(Groovy Script)、脚本内容
- 勾选 Use Groovy Sandbox
- 设置选项类型(单选/多选/单选按钮/复选框)
bash
Name: services
Groovy Script 脚本内容:
return [
"pig-gateway",
"pig-auth",
"pig-quartz"
]
Description:选择需要发布的项目
Choice Type:Single Select [单选]
实现效果:
1.4.1.2 主动选择反应参数 (Active Choices Reactive Parameter)
- 定义:根据其他参数变化动态更新选项的级联参数(如回退指定服务->选择回退版本》)
- 配置步骤:
- 勾选参数化构建 → 添加参数 → 选择 Active Choices Reactive Parameter
- 配置参数名称、描述、脚本类型(Groovy Script)、脚本内容
- 设置选项类型(单选/多选/单选按钮/复选框)
- 设置引用参数
bash
Name: tag
Groovy Script 脚本内容:
pathA="/home/application/jd/be/pig-auth/version"
pathB="/home/application/jd/be/pig-gateway/version"
pathC="/home/application/jd/be/pig-quartz/version"
//脚本的内容大致是:根据选择的服务,去读取不同的服务目录下的version文本内容,读取版本号,然后返回给tag参数
A=['bash','-c',"cat ${pathA}"].execute().text.readLines()
B=['bash','-c',"cat ${pathB}"].execute().text.readLines()
C=['bash','-c',"cat ${pathC}"].execute().text.readLines()
if (services.equals("pig-auth")) {
return A
} else if (services.equals("pig-gateway")) {
return B
} else if (services.equals("pig-quartz")) {
return C
}
Description:选择回退的版本
Choice Type:Single Select [单选按钮]
Referenced parameters:services
实现效果:
1.4.1.3 主动选择反应引用参数 (Active Choices Reactive Reference Parameter)
- 定义:仅展示关联参数的说明信息,不参与构建流程 [与第二项的区别在于本参数只作为说明信息,而不能够作为变量往下传递。]
- 配置步骤:
- 勾选参数化构建 → 添加参数 → 选择 Active Choices Reactive Reference Parameter
- 配置参数名称、描述、脚本类型(Groovy Script)、脚本内容
- 设置选项类型(文本输入框/编号列表/项目符号列表/格式化 HTML/格式化隐藏 HTML)
- 设置引用参数
bash
Name: type
Groovy Script 脚本内容:
switch(services){
case~/.*pig-gateway.*/:
return '<img src="https://s3api.srebro.cn:443/picgo/202507161048365.png">'
break
case ~/.*pig-auth.*/:
return '<img src="https://s3api.srebro.cn:443/picgo/202507161048366.png">'
break
case ~/.*pig-quartz*/:
return '<img src="https://s3api.srebro.cn:443/picgo/202507161048367.jpeg">'
break
}
Choice Type:Single Select [格式化 HTML]
Referenced parameters:services
实现效果:
1.4.2 pipeline 流水线中使用
在 pipeline 中使用参数化构建,先使用语法生成器,生成代码,然后复制到 pipeline 中
1.4.2.1 使用 Active choice 实现代码回退
groovy
pipeline {
agent any
parameters {
activeChoice choiceType: 'PT_SINGLE_SELECT', description: '选择需要发布的项目', filterLength: 1, filterable: false, name: 'services', randomName: 'choice-parameter-3800676252603521', script: groovyScript(fallbackScript: [classpath: [], oldScript: '', sandbox: false, script: ''], script: [classpath: [], oldScript: '', sandbox: true, script: '''return [
"pig-gateway",
"pig-auth",
"pig-quartz"
]'''])
reactiveChoice choiceType: 'PT_RADIO', description: '选择回退的版本', filterLength: 1, filterable: false, name: 'tag', randomName: 'choice-parameter-3800676256483799', referencedParameters: 'services', script: groovyScript(fallbackScript: [classpath: [], oldScript: '', sandbox: false, script: ''], script: [classpath: [], oldScript: '', sandbox: false, script: '''
pathA="/home/application/jd/be/pig-auth/version"
pathB="/home/application/jd/be/pig-gateway/version"
pathC="/home/application/jd/be/pig-quart/version"
A=[\'bash\',\'-c\',"cat ${pathA}"].execute().text.readLines()
B=[\'bash\',\'-c\',"cat ${pathB}"].execute().text.readLines()
C=[\'bash\',\'-c\',"cat ${pathC}"].execute().text.readLines()
if (services.equals("pig-auth")) {
return A
} else if (services.equals("pig-gateway")) {
return B
} else if (services.equals("pig-quartz")) {
return C
}'''])
activeChoiceHtml choiceType: 'ET_FORMATTED_HTML', name: 'type', omitValueField: false, randomName: 'choice-parameter-3800676259345892', referencedParameters: 'services', script: groovyScript(fallbackScript: [classpath: [], oldScript: '', sandbox: false, script: ''], script: [classpath: [], oldScript: '', sandbox: true, script: '''switch(services){
case~/.*pig-gateway.*/:
return \'<img src="https://s3api.srebro.cn:443/picgo/202507161048365.png">\'
break
case ~/.*pig-auth.*/:
return \'<img src="https://s3api.srebro.cn:443/picgo/202507161048366.png">\'
break
case ~/.*pig-quartz*/:
return \'<img src="https://s3api.srebro.cn:443/picgo/202507161048367.jpeg">\'
break
}'''])
}
stages {
stage('test') {
steps {
script {
sh """
echo "当前${services} 服务,回退的版本为:${tag}"
"""
}
}
}
}
}
实现效果: