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

Jenkins共享库自定义含可选参数与闭包的步骤方法声明

解决Jenkins全局共享库自定义步骤的call方法适配问题

要同时支持带可选命名参数+必填闭包、仅传闭包两种调用方式,你可以通过重载call方法实现,同时明确参数类型以规避沙箱权限异常。具体实现如下:

1. 完整的vars/mystep.groovy代码

// 适配带命名参数的调用场景
def call(Map params = [:], Closure body) {
    // 给可选参数设置默认值,避免空指针
    def param1 = params.param1 ?: "default_val1"
    def param2 = params.param2 ?: "default_val2"
    def param3 = params.param3 ?: "default_val3"

    // 执行自定义步骤逻辑
    echo "param1: ${param1}, param2: ${param2}, param3: ${param3}"
    body() // 执行传入的必填闭包
}

// 适配仅传闭包的调用场景,内部转发到第一个方法
def call(Closure body) {
    call([:], body)
}

2. 核心要点说明

  • 方法重载:定义两个call方法,分别对应两种调用场景。仅传闭包的方法内部自动调用带Map参数的方法,传入空Map和闭包,实现逻辑复用。
  • 默认值处理:给Map参数设置默认值[:],确保不传命名参数时也不会出现参数为空的问题;每个可选参数用?:设置默认值,避免空指针异常。
  • 沙箱兼容:明确声明参数类型(Map、Closure),让Jenkins沙箱能正确识别参数,避免抛出RejectedAccessException。

3. 调用示例

带命名参数调用

mystep(param1: "custom_val1", param3: "custom_val3") {
    echo "执行闭包内容"
}

仅传闭包调用

mystep {
    echo "仅执行闭包内容"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:09:49