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

Groovy脚本移至函数后执行失败的解决方案咨询

问题原因分析
  1. 变量类型不匹配:报错提示java.lang.String.putAll()不存在,说明image_properties被识别为字符串类型,而非预期的Map类型,导致无法调用Map的putAll()方法。通常是因为外部的image_properties未正确初始化为Map,或在流程中被意外覆盖为字符串。
  2. 文件写入逻辑错误:迁移后的函数循环内每次执行echo "" > file.txt,会清空文件内容,最终file.txt仅保留最后一个分组的数据,丢失了前面的分组信息。
解决方案

1. 确保image_properties正确初始化

在流水线的全局范围或当前脚本块开头,显式初始化image_properties为Map:

def image_properties = [:] // 初始化空Map

2. 修复abilityForRestart函数逻辑

修改函数,修正文件写入逻辑并确保变量类型安全:

def abilityForRestart(vDirectories) {
    def results = modelPartition(vDirectories, 4)
    assert results instanceof List
    
    // 循环前统一清空文件,避免残留数据
    sh "echo '' > file.txt"
    
    for(i=0;i<results.size();i++) {
        sh """
        echo "modelgroup${i}=${results[i]}" >> file.txt
        sed -i 's/[][]//g' file.txt
        """
    }
    
    sh "cat file.txt" // 可选,用于验证文件内容
    def build_properties = readProperties file: "file.txt"
    
    // 确保image_properties是Map类型后再合并数据
    if (!(image_properties instanceof Map)) {
        image_properties = [:]
    }
    image_properties.putAll(build_properties)
    
    return image_properties
}

3. 优化函数调用(可选)

如果需要明确接收返回值,可调整调用方式:

stage('Split and store Model Groups') {
    steps{
        script {
            image_properties = abilityForRestart(Directories)
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:07:53