吾爱乐享
个人学习网站

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”,配置第一个参数:

  3. Name: environment(参数名称)

  4. Description: 请选择部署环境(参数描述)
  5. Choice Type: Single Select(单选)
  6. Script:
    groovy
    return ["开发环境", "测试环境", "生产环境"]
  7. 其他选项保持默认

  8. 再次点击 “Add Parameter”,选择 “Active Choices Reactive Parameter”,配置第二个参数(动态多选参数):

  9. Name: modules(参数名称)

  10. Description: 请选择需要部署的模块(参数描述)
  11. Choice Type: Multi Select(多选)
  12. Referenced parameters: environment(引用的参数,即第一个参数名称)
  13. Script:
    groovy
    // 根据选择的环境返回不同的模块列表
    if (environment == "开发环境") {
    return ["用户模块", "订单模块", "支付模块", "测试工具模块"]
    } else if (environment == "测试环境") {
    return ["用户模块", "订单模块", "支付模块"]
    } else if (environment == "生产环境") {
    return ["用户模块", "订单模块", "支付模块", "监控模块"]
    } else {
    return ["请先选择环境"]
    }
  14. 其他选项保持默认

  15. 点击 “保存” 完成配置

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

  1. 进入刚才创建的任务
  2. 点击 “Build with Parameters”
  3. 尝试选择不同的环境,观察 “部署模块” 的可选值变化:
  4. 选择 “开发环境” 时,会显示包括”测试工具模块”在内的4个选项
  5. 选择 “测试环境” 时,会显示3个核心模块
  6. 选择 “生产环境” 时,会显示包括”监控模块”在内的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.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,查看效果

image-20250805143732784

image-20250805143758394

六、常见问题

  1. 参数不生效
  2. 检查参数名称是否正确,特别是引用参数时
  3. 确保脚本没有语法错误
  4. 检查Jenkins日志寻找错误信息

  5. 选项没有动态更新

  6. 确保第二个参数类型是”Active Choices Reactive Parameter”
  7. 确认”Referenced parameters”已正确设置

  8. 脚本权限问题

  9. 如果脚本需要访问文件系统,确保Jenkins运行用户有相应权限
  10. 对于复杂脚本,考虑使用Jenkins凭证存储敏感信息

七、总结

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

本文永久更新地址:

https://www.fenxiangbe.com/p/jenkins插件Active Choices的使用通过参数动态控制多选参数的选项.html

赞(0) 打赏
未经允许不得转载:吾爱乐享 » jenkins插件Active Choices的使用通过参数动态控制多选参数的选项

评论 抢沙发

评论前必须登录!

 

推荐免费资源共享,个人经验总结学习

联系我们联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏