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

如何在Jenkins流水线中修改Ansible YAML playbook按后缀补全dest字段值

错误原因

报错是YAML字段的访问层级错误导致:你调用endsWith()的对象是列表而非单个文件的src字符串。
你的delivery.yaml结构层级如下,你漏了前两层列表的下标访问:

  1. 根层级是数组,第一个元素才是Ansible Play配置
  2. tasks字段也是数组,第一个元素才是「Copy files」复制任务
  3. 复制任务下的with_items才是存储所有待复制文件配置的列表

正确实现代码

你可以直接用后缀映射表的方式批量赋值,无需重复写多次查找逻辑:

stage('YAML test'){
    steps{
        script{
            // 定义后缀与目标路径的映射规则
            def suffixMap = [
                'xml': 'target1',
                'so': 'target2',
                'exe': 'target3',
                'lib': 'target4'
            ]
            def yamlData = readYaml file: 'delivery.yaml'
            // 遍历所有待复制文件配置赋值dest
            yamlData[0].tasks[0].with_items.each { item ->
                def suffix = item.src.split('\\.').last()
                if(suffixMap.containsKey(suffix)){
                    item.dest = suffixMap[suffix]
                }
            }
            writeYaml file: 'delivery_temp.yaml', data: yamlData
            sh "cat delivery_temp.yaml"
        }
    }
}

如果你的tasks列表里有多个任务,推荐按任务名匹配定位复制任务,避免下标顺序变化导致的错误:

// 替换yamlData[0].tasks[0]的部分,按任务名过滤更稳妥
def copyTask = yamlData[0].tasks.find { it.name == 'Copy files' }
copyTask.with_items.each { item ->
    // 同上赋值逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:54:00