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

如何解决groovy.lang.MissingMethodException:Setup.call()参数不匹配问题

问题解决:Jenkins流水线调用Setup脚本参数传递报错

错误原因

你在流水线中用Setup(CreationDate: params.createDate)这种键值对方式调用脚本时,实际传递的是LinkedHashMap类型参数,但当前Setup脚本的call方法仅定义了接收Closure类型的参数,因此触发MissingMethodException。

解决方案

方案1:修改流水线调用方式,适配现有Setup的闭包参数

将流水线中的调用改为闭包形式,匹配Setup脚本原本的参数定义:

node {
    stage ('stageone') {
        Setup {
            CreationDate = params.createDate
        }
    }
}

同时补全Setup脚本的逻辑,确保闭包执行后能获取到参数:

def call(Closure body) {
    def config = [:]
    if (body) {
        body.resolveStrategy = Closure.DELEGATE_FIRST
        body.delegate = config
        body() // 执行闭包,将参数注入到config映射中
    }
    // 此处可使用config.CreationDate获取传递的参数
    println "获取到的CreationDate:${config.CreationDate}"
}

方案2:修改Setup脚本,支持直接接收Map参数(兼容两种调用方式)

如果想保留流水线原有的调用写法,可以给Setup脚本添加重载的call方法,同时支持Map和Closure两种参数类型:

// 新增接收Map参数的call方法
def call(Map config) {
    // 直接使用传入的参数映射
    println "获取到的CreationDate:${config.CreationDate}"
}

// 保留原有的闭包支持,复用Map版本的逻辑
def call(Closure body) {
    def config = [:]
    if (body) {
        body.resolveStrategy = Closure.DELEGATE_FIRST
        body.delegate = config
        body()
    }
    call(config) // 调用Map版本的方法处理参数
}

修改后,流水线中原有的Setup(CreationDate: params.createDate)调用即可正常执行,同时也支持闭包形式的调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:27:40