当前位置: 首页 > news >正文

jenkins插件Active Choices的使用通过参数动态控制多选参数的选项

title: jenkins插件Active Choices的使用通过参数动态控制多选参数的选项
tags: 
- jenkins
categories:
- 学习语录

Jenkins Active Choices 插件:通过参数动态控制多选参数选项

一、插件介绍

Active Choices 插件(以前称为 Uno Choice 插件)是 Jenkins 中一款强大的参数化构建插件,允许你创建动态交互的参数选项。其核心功能是能够根据一个参数的值,实时动态地改变另一个参数的可选值,特别适合构建具有依赖关系的参数表单。

二、安装插件

  1. 登录 Jenkins 管理界面

  2. 导航至 Manage JenkinsPlugins

  3. 在 "可选插件" 标签页搜索 "Active Choices"

  4. 勾选插件并点击 "Install without restart"

  5. 等待安装完成后重启 Jenkins(如提示)

三、核心概念

Active Choices 插件提供三种主要参数类型:

  1. Active Choices Parameter:动态单选/多选参数

  2. Active Choices Reactive Parameter:响应式参数,可根据其他参数值动态变化

  3. Active Choices Reactive Reference Parameter:用于展示参考信息的响应式参数

本文重点介绍如何使用前两种参数类型实现"通过参数动态控制多选参数选项"。

四、使用示例:动态控制多选参数选项

假设我们有一个需求:

  • 第一个参数(环境类型):可选值为 "开发环境"、"测试环境"、"生产环境"

  • 第二个参数(部署模块):根据选择的环境不同,显示不同的可选模块

步骤 1:创建新任务

  1. 点击 Jenkins 首页的 "新建任务"

  2. 输入任务名称,选择 "自由风格的软件项目",点击 "确定"

步骤 2:配置参数

  1. 在任务配置页面,勾选 "This project is parameterized"(此项目是参数化的)

  2. 点击 "Add Parameter",选择 "Active Choices Parameter",配置第一个参数:

    • Name: environment(参数名称)

    • Description: 请选择部署环境(参数描述)

    • Choice Type: Single Select(单选)

    • Script:

      return ["开发环境", "测试环境", "生产环境"]
    • 其他选项保持默认

  3. 再次点击 "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 ["请先选择环境"]
      }
    • 其他选项保持默认

  4. 点击 "保存" 完成配置

步骤 3:测试动态参数效果

  1. 进入刚才创建的任务

  2. 点击 "Build with Parameters"

  3. 尝试选择不同的环境,观察 "部署模块" 的可选值变化:

    • 选择 "开发环境" 时,会显示包括"测试工具模块"在内的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.配一个字符串参数,用于提供接口的入参

image-20250805143243786

2.添加Active Choices Reactive Parameter参数

image-20250805143542348

image-20250805143557408

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,查看效果

image-20250805143732784

image-20250805143758394

六、常见问题

  1. 参数不生效

    • 检查参数名称是否正确,特别是引用参数时

    • 确保脚本没有语法错误

    • 检查Jenkins日志寻找错误信息

  2. 选项没有动态更新

    • 确保第二个参数类型是"Active Choices Reactive Parameter"

    • 确认"Referenced parameters"已正确设置

  3. 脚本权限问题

    • 如果脚本需要访问文件系统,确保Jenkins运行用户有相应权限

    • 对于复杂脚本,考虑使用Jenkins凭证存储敏感信息

七、总结

Active Choices 插件为 Jenkins 提供了强大的动态参数功能,通过本文介绍的方法,你可以轻松实现根据一个参数的值动态控制另一个多选参数的选项。这在构建复杂的CI/CD流程时特别有用,能够根据不同场景提供定制化的参数选项,提高构建效率和准确性。

http://www.lryc.cn/news/611125.html

相关文章:

  • 聚焦智能穿戴“下一代消费终端”之争,Meta/微美全息借AI+AR积淀定义行业未来
  • Swift 实战:用队列巧解 LeetCode 346 数据流中的移动平均数
  • 【RabbitMQ】高级特性—持久性、重试机制详解
  • 栈的输入与输出方式
  • 《算法导论》第 4 章 - 分治策略
  • Python Day23程序、进程、线程及多线程实现全解析 例题分析
  • 星图云开发者平台赋能商储油安全管控数字化转型
  • 为什么要选择时序数据库IoTDB?
  • Python爬虫08_Requests聚焦批量爬取图片
  • Pandas 入门:数据分析的得力工具
  • 嵌入式硬件中运放内部底层分析
  • 基于深度学习的医学图像分析:使用CycleGAN实现医学图像风格转换
  • 后量子时代已至?中国量子加密技术突破与网络安全新基建
  • 关于npx react-native run-android下载进程缓慢以及进程卡壳等问题的解决方案。
  • Java 大视界 -- Java 大数据在智能医疗电子病历数据分析与临床决策支持中的应用(382)
  • iOS混淆工具有哪些?技术演进与选型趋势全景解析
  • 企业如何用现代数仓架构挖掘新业务盈利点?AllData产品从目标、路径、结果给出答案
  • Go语言实战案例:使用sync.Mutex实现资源加锁
  • 查看 Redis 某个数据库的内存占用
  • 【前端】网站favicon图标制作
  • 力扣-208.实现Trie(前缀树)
  • C++ - 仿 RabbitMQ 实现消息队列--服务端核心模块实现(六)
  • Linux-Day11.WEB服务,虚拟主机
  • VUE丢失long类型精度,使用 json-bigint 库解析大整数
  • 人工智能领域、图欧科技、IMYAI智能助手2025年7月更新月报
  • 暑期算法训练.14
  • 关于如何SecureCRT软件连接开发板后默认显示大字体,且重启开发板或重新连接时不会重置的方法
  • Android原生项目集成Flutter模块极简指南
  • Linux学习-数据结构(链表)
  • 深入浅出:Ajax 与 Servlet 实现前后端数据交互