如何使用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
相关产品推荐
相关产品推荐

