jenkins插件Active Choices的使用通过参数动态控制多选参数的选项
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:
return ["开发环境", "测试环境", "生产环境"]
其他选项保持默认
再次点击 "Add Parameter",选择 "Active Choices Reactive Parameter",配置第二个参数(动态多选参数):
Name:
modules
(参数名称)Description:
请选择需要部署的模块
(参数描述)Choice Type:
Multi Select
(多选)Referenced parameters:
environment
(引用的参数,即第一个参数名称)Script:
// 根据选择的环境返回不同的模块列表 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.responseCodeif (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流程时特别有用,能够根据不同场景提供定制化的参数选项,提高构建效率和准确性。