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.pswp.cn/bicheng/92139.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92139.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/92139.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matplotlib(六)- 坐标轴定制

文章目录一、坐标轴概述1. 坐标轴介绍2. 坐标轴相关属性二、坐标轴1. axes() 方法介绍2. 示例:添加多个绘图区域三、坐标轴的刻度1. 坐标轴的刻度介绍2. 刻度定位器和格式器2.1 刻度定位器2.2 刻度格式器2.3 示例:刻度定位和格式3. 刻度样式3.1 tick_par…

【物联网】基于树莓派的物联网开发【22】——树莓派获取传感器数据实时存储实战

场景介绍 今天程序猫带领大家如何实时获取树莓派传感器温湿度数据,并自动存储到数据库中。确保数据的持续性。 实现过程 硬件连接 树莓派4b连接GPIO引脚与DHT11传感器; 硬件只涉及树莓派、DHT11传感器。 DHT11的信号引脚连接树莓派的GPIO17, DHT11的Vdd&…

Linux DNS缓存与Nginx DNS缓存运维文档

一、Linux DNS缓存机制与配置 1. Linux DNS缓存原理 Linux系统中的DNS缓存主要通过以下几种方式实现: ​** nscd(Name Service Caching Daemon)**​:系统级缓存服务,可缓存DNS解析、主机名解析等信息​dnsmasq​:轻量级DNS转发器和…

Java开发时出现的问题---并发与资源管理深层问题

Java 并发模型基于 JVM 内存模型(JMM),资源管理涉及 IO、线程、锁等关键组件。若对并发语义、资源生命周期理解不透彻,易引发死锁、内存泄漏、数据错乱等严重问题。1. 并发三大特性(可见性、原子性、有序性&#xff09…

从「同步」到「异步」:用 aiohttp 把 Python 网络 I/O 榨到极致

目录 一、写在前面:为什么 IO 是瓶颈 二、同步模型:requests 的忧伤 三、线程池:用并发掩盖阻塞 四、aiohttp:让「等待」非阻塞 4.1 安装与版本约定 4.2 异步客户端:asyncio aiohttp 4.3 错误处理与超时 4.4 …

MySQL 在麒麟系统上部署使用 + DBeaver 远程连接 + SQL 数据导入完整流程

🚀 MySQL 在麒麟系统上部署使用 DBeaver 远程连接 SQL 数据导入完整流程适用于国产操作系统(如:麒麟 / 统信 / Ubuntu)和 MySQL 8.0。包含远程配置、授权连接、SQL 导入、DBeaver连接配置等常见问题解决方案。📦 环境…

C语言-指针初级(指针定义、指针的作用、指针的计算、野指针、悬空指针、void类型指针)

本章概述思维导图:C语言指针指针是C语言中最强大但也最容易混淆的特性之一。它提供了直接操作内存地址的能力,使得C语言具有高效性和灵活性。下面我将详细介绍C语言指针的各个方面。指针定义指针的本质:指针是一个变量,其值为另一…

具身智能VLA困于“数据泥潭”,人类活动视频数据是否是“破局之钥”?

前言尽管当前的视觉-语言-动作(VLA)模型已展现出显著进展,但其在新场景和与复杂物体交互中的性能会显著下降,在遵循指令方面落后于像LLaVA 这样的大型多模态模型(LMM)。这种局限性源于现有VLA模型对存在固有…

CIO如何规划企业BI分析指标体系 —— 从经营出发到绩效管理

如果你是一家企业的CIO,要启动一个商业智能BI项目,负责规划整个项目的商业智能BI分析内容,你该如何入手准备?要有什么样的思路。如果是管理层、老板还不能清晰认识到商业智能BI的价值,也提不出很清晰的需求&#xff0c…

go学习笔记:panic是什么含义

anic 是 Go 语言中的一种运行时错误处理机制,用于处理程序中的异常情况。 基本含义 panic 会: 立即停止当前函数的执行 开始执行 defer 函数(如果有的话) 向上传播到调用栈,逐层执行 defer 如果到达 main 函数&am…

OpenLayers 入门指南【五】:Map 容器

文章目录 一、Map 对象核心参数 1. target 2. view 3. layers 4. controls 5. interactions 6. 其他重要参数 二、Map 对象常用方法 1. 图层管理 2. 控件管理 3. 交互管理 4. 视图与坐标操作 5. 事件监听 6. 覆盖物管理 7. 其他 三、总结 上一章节中我们通过修改OlMap.vue组件已…

关税战火中的技术方舟:新西兰证券交易所的破局之道 ——从15%关税冲击到跨塔斯曼结算联盟,解码下一代交易基础设施

一、今日焦点:全球关税震荡与新西兰的“技术自卫” 1. 特朗普关税大限落地,新西兰启动紧急游说 2025年8月1日,美国总统特朗普正式签署行政令,对贸易顺差国征收最低15%基准关税。新西兰贸易部长紧急声明:“将提出有力证…

windows内核研究(软件调试-软件断点)

软件调试软件断点调试的本质是什么?就是在被调试程序中触发异常,然后被调试程序就会向_DEBUG_OBJECT结构体添加调试事件,这里我们调试器就接管这个异常了(调试的过程就是异常处理的过程) 软件断点 在x64dbg中通过快捷键…

HarmonyOS】鸿蒙应用开发中常用的三方库介绍和使用示例

🌟 鸿蒙应用开发常用三方库指南(2025 最新版)适用版本:HarmonyOS NEXT / API 12 参考来源:HarmonyOS 三方库中心 截止至 2025 年 8 月 1 日,本文整理了当前社区中下载量高、稳定性强、生态完善的热门三方库…

【通识】C Sharp

1. 使用 \p{名称}构造匹配Unicode常规类别(该示例为Pd或“标点、短划线”类别)和命名块(IsGreek和IsBsicLatin命名块) using System; using system.Text.RegularExpressions; public class Example {public static void main() {s…

国内首个开源SCA社区——OpenSCA开源社区

OpenSCA开源社区成果说明项目背景智能时代,软件定义一切。随着开发模式的敏捷化转型,开源代码在软件制品中的占比越来越大,开源软件已然成为软件供应链的重要组成部分。由于其特殊性,开源代码的引入增加了软件应用的风险面&#x…

超聚变:智能体时代,AI原生重构城企数智化基因

2025 世界人工智能大会(WAIC)世博展览馆内,超聚变展台前人头攒动,其展示的AI落地全栈解决方案及上百个AI应用场景吸引了众多参观者驻足观看。这是今年WAIC大会火爆的一角,更是当下AI应用爆发的一个缩影。当人工智能发展…

Traccar:开源GPS追踪系统的核心价值与技术全景

Traccar:开源GPS追踪系统的核心价值与技术全景 —— 从设备兼容到企业级定位管理的开源实践 一、项目定位:多场景定位管理的开源基石 Traccar是一个高扩展性的开源GPS追踪平台,支持全球超过200种通信协议与2000款GPS设备(包括车…

编程与数学 03-002 计算机网络 20_计算机网络课程实验与实践

编程与数学 03-002 计算机网络 20_计算机网络课程实验与实践一、实验环境搭建(一)使用模拟器(如Cisco Packet Tracer)搭建网络实验环境(二)实验设备的配置与连接二、基础网络实验(一&#xff09…

15个命令上手Linux!

1、id,显示当前登录系统的用户信息2、pwd,显示当前工作目录的绝对路径3、ls,显示当前目录下的内容(ls -r:按反向顺序列出内容,ls -l:以详细列表形式显示)4、cd,切换工作目…