title: jenkins插件Active Choices的使用通过参数动态控制多选参数的选项
tags:
- jenkins
categories:
- 学习语录
Jenkins Active Choices 插件:通过参数动态控制多选参数选项
一、插件介绍
Active Choices 插件(以前称为 Uno Choice 插件)是 Jenkins 中一款强大的参数化构建插件,允许你创建动态交互的参数选项。其核心功能是能够根据一个参数的值,实时动态地改变另一个参数的可选值,特别适合构建具有依赖关系的参数表单。
二、安装插件
- 登录 Jenkins 管理界面
- 导航至 Manage Jenkins → Plugins
- 在 “可选插件” 标签页搜索 “Active Choices”
- 勾选插件并点击 “Install without restart”
- 等待安装完成后重启 Jenkins(如提示)
三、核心概念
Active Choices 插件提供三种主要参数类型:
- Active Choices Parameter:动态单选/多选参数
- Active Choices Reactive Parameter:响应式参数,可根据其他参数值动态变化
- Active Choices Reactive Reference Parameter:用于展示参考信息的响应式参数
本文重点介绍如何使用前两种参数类型实现”通过参数动态控制多选参数选项”。
四、使用示例:动态控制多选参数选项
假设我们有一个需求:
– 第一个参数(环境类型):可选值为 “开发环境”、”测试环境”、”生产环境”
– 第二个参数(部署模块):根据选择的环境不同,显示不同的可选模块
步骤 1:创建新任务
- 点击 Jenkins 首页的 “新建任务”
- 输入任务名称,选择 “自由风格的软件项目”,点击 “确定”
步骤 2:配置参数
- 在任务配置页面,勾选 “This project is parameterized”(此项目是参数化的)
-
点击 “Add Parameter”,选择 “Active Choices Parameter”,配置第一个参数:
-
Name:
environment
(参数名称) - Description:
请选择部署环境
(参数描述) - Choice Type:
Single Select
(单选) - Script:
groovy
return ["开发环境", "测试环境", "生产环境"] -
其他选项保持默认
-
再次点击 “Add Parameter”,选择 “Active Choices Reactive Parameter”,配置第二个参数(动态多选参数):
-
Name:
modules
(参数名称) - Description:
请选择需要部署的模块
(参数描述) - Choice Type:
Multi Select
(多选) - Referenced parameters:
environment
(引用的参数,即第一个参数名称) - Script:
groovy
// 根据选择的环境返回不同的模块列表
if (environment == "开发环境") {
return ["用户模块", "订单模块", "支付模块", "测试工具模块"]
} else if (environment == "测试环境") {
return ["用户模块", "订单模块", "支付模块"]
} else if (environment == "生产环境") {
return ["用户模块", "订单模块", "支付模块", "监控模块"]
} else {
return ["请先选择环境"]
} -
其他选项保持默认
-
点击 “保存” 完成配置
步骤 3:测试动态参数效果
- 进入刚才创建的任务
- 点击 “Build with Parameters”
- 尝试选择不同的环境,观察 “部署模块” 的可选值变化:
- 选择 “开发环境” 时,会显示包括”测试工具模块”在内的4个选项
- 选择 “测试环境” 时,会显示3个核心模块
- 选择 “生产环境” 时,会显示包括”监控模块”在内的4个选项
五、高级用法
1. 从外部数据源获取选项
你可以从文件、数据库或API获取选项列表,例如从文件读取:
// 从文件读取环境列表
def envFile = new File("/jenkins/config/environments.txt")
return envFile.readLines()
2. 级联多个参数
可以创建多个响应式参数,形成参数链,例如:环境 → 服务 → 功能模块
// 第三个参数:根据前两个参数动态变化
if (environment == "生产环境" && service == "用户服务") {
return ["登录功能", "注册功能", "权限管理"]
} else {
// 其他组合的选项...
}
3. 设置默认值
可以为参数设置默认值:
def options = ["开发环境", "测试环境", "生产环境"]
return [
defaultValue: "测试环境",
value: options
]
4.从api接口返回数据
1.配一个字符串参数,用于提供接口的入参
2.添加Active Choices Reactive Parameter参数
import groovy.json.JsonSlurper
import java.net.URL
import java.net.HttpURLConnection
def orderType = ORDER1
def apiUrl = "http://wx.xxx.com/wx/search?content=${URLEncoder.encode(orderType, 'UTF-8')}"
try {
// 创建HTTP连接
URL url = new URL(apiUrl)
HttpURLConnection connection = (HttpURLConnection) url.openConnection()
connection.requestMethod = "GET"
connection.connectTimeout = 50000 // 10秒连接超时
connection.readTimeout = 50000 // 10秒读取超时
// 获取响应码
int responseCode = connection.responseCode
if (responseCode == 200) {
// 解析JSON响应
def jsonSlurper = new JsonSlurper()
def responseJson = jsonSlurper.parse(connection.inputStream)
// 提取"热门电影"数组(直接根据键名获取,注意中文键名需完全匹配)
def hotMovies = responseJson."getJuzi" // 中文键名需用双引号包裹并通过.访问
// 验证数据格式
if (hotMovies && hotMovies instanceof List) {
// 过滤空值和空字符串,确保选项有效
def movieOptions = hotMovies.findAll {
it != null && it.toString().trim() != ""
}.collect { it.toString() } // 确保所有元素转为字符串
if (movieOptions) {
return movieOptions // 返回电影列表作为选项
} else {
return ["热门电影列表为空"]
}
} else {
return ["接口返回格式异常,未找到有效的'热门电影'数组"]
}
} else {
return ["接口请求失败,状态码: ${responseCode}"]
}
} catch (Exception e) {
def errorMsg = e.message ?: "未知错误"
return ["获取热门电影失败: ${errorMsg.take(50)}"] // 限制错误信息长度
}
3,查看效果
六、常见问题
- 参数不生效:
- 检查参数名称是否正确,特别是引用参数时
- 确保脚本没有语法错误
-
检查Jenkins日志寻找错误信息
-
选项没有动态更新:
- 确保第二个参数类型是”Active Choices Reactive Parameter”
-
确认”Referenced parameters”已正确设置
-
脚本权限问题:
- 如果脚本需要访问文件系统,确保Jenkins运行用户有相应权限
- 对于复杂脚本,考虑使用Jenkins凭证存储敏感信息
七、总结
Active Choices 插件为 Jenkins 提供了强大的动态参数功能,通过本文介绍的方法,你可以轻松实现根据一个参数的值动态控制另一个多选参数的选项。这在构建复杂的CI/CD流程时特别有用,能够根据不同场景提供定制化的参数选项,提高构建效率和准确性。
本文永久更新地址:
https://www.fenxiangbe.com/p/jenkins插件Active Choices的使用通过参数动态控制多选参数的选项.html
评论前必须登录!
注册