You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Jenkins Active Choices Plugin从YAML文件动态提取组填充复选框参数

你的实现思路是正确的,核心问题是没有匹配YAML的层级结构提取目标节点。

你使用的Ansible Inventory格式YAML的层级逻辑如下:

  • 最顶层Map的唯一key为all
  • all对应的value中,children字段下的所有一级key,就是你需要提取的主机组名称

你原脚本直接遍历parser.load返回的最顶层Map,只会拿到all对应的键值对,无法获取到下层的组名。以下是修正后的可用脚本:

import org.yaml.snakeyaml.Yaml

// 初始化返回列表,默认加个空选项避免加载失败时无选项
List groups = [""]
try {
    File inventoryFile = new File("/var/lib/jenkins/workspace/groups/hosts")
    if (inventoryFile.exists()) {
        Yaml parser = new Yaml()
        def yamlContent = parser.load(inventoryFile.text)
        // 逐层取到children节点的所有key,就是主机组名
        groups = yamlContent.all.children.keySet() as List
    }
} catch (Exception e) {
    // 异常时保留默认空选项,不会导致Jenkins参数页加载报错
    println("读取inventory文件失败: ${e.message}")
}

// Active Choices插件会直接将返回值作为参数选项,不需要print
return groups

适配说明

  • 后续YAML中新增任意主机组,脚本都会自动读取children下的所有key,无需修改代码
  • 额外增加了文件存在判断和异常捕获,避免文件丢失/格式错误时Jenkins构建参数页加载失败

内容的提问来源于stack exchange,提问作者Ketul Radadiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:09:02