Jenkins Pipeline 中的 NotSerializableException: LazyMap 报错 | 3个实用解决方案

大家好!在使用 Jenkins Pipeline 时,你是否遇到过类似以下的报错?

NotSerializableException: groovy.json.internal.LazyMap

这个看似棘手的异常,其实与 Groovy 版本的更新有关。简单来说,从Groovy 2.3起(Jenkins 2.7.1 所用的是 2.4.7),默认的JsonSlurper在解析 JSON 时会返回一种叫LazyMap的结构。它虽然节省内存,却不支持序列化,而 Pipeline 在执行中经常需要序列化数据,因此直接使用就容易抛出异常。

常见问题代码如下:

def jsonResponse = sh(script: 'curl -s http://example.com/api/data', returnStdout: true).trim() def jsonSlurper = new groovy.json.JsonSlurper() def result = jsonSlurper.parseText(jsonResponse) // 这里得到的是 LazyMap println(result) // 触发 NotSerializableException!

别担心,下面为大家分享三个实用的解决方案,帮你轻松绕过此坑。

方案适用场景备注
@NonCPS 注解推荐首选,逻辑独立、不需与 Pipeline 步骤交互时最清晰、最规范
转换为 HashMap只需简单转换,数据结构较平坦时注意嵌套结构的拷贝问题
改用脚本式流水线已在脚本式环境中,或声明式限制过多时灵活,但需注意代码风格统一

简单来说,遇到LazyMap导致的序列化错误时,优先考虑使用@NonCPS注解封装解析逻辑,这通常是最干净、最可持续的做法。


解决方案一:使用 @NonCPS 注解(推荐)

这是最直接、最推荐的做法。
通过在方法上添加@NonCPS注解,可以告诉 Jenkins 这个方法内的操作不需要参与序列化,从而允许使用LazyMap等非序列化对象。

示例:

@NonCPS def parseJson(String jsonText) { return new groovy.json.JsonSlurper().parseText(jsonText) } node { def jsonResponse = sh(script: 'curl -s http://example.com/api/data', returnStdout: true).trim() def result = parseJson(jsonResponse) // 安全,不会触发异常 println(result) }

小贴士:
@NonCPS方法内应尽量保持纯 Groovy 逻辑,避免调用 Jenkins Pipeline 的步骤(如sh,echo等)。


解决方案二:将 LazyMap 转换为可序列化的 Map

如果不想用@NonCPS,也可以手动将LazyMap转换为标准的、可序列化的HashMap

示例:

def jsonResponse = sh(script: 'curl -s http://example.com/api/data', returnStdout: true).trim() def jsonSlurper = new groovy.json.JsonSlurper() def lazyMap = jsonSlurper.parseText(jsonResponse) def serializableMap = new HashMap<>(lazyMap) // 关键转换 println(serializableMap) // 现在可以安全使用了

注意:这种方式对于嵌套较深的 JSON 结构是浅拷贝,如果内层仍有LazyMap,可能仍需递归转换。


解决方案三:改用脚本式流水线(Scripted Pipeline)

如果你在使用声明式流水线(Declarative Pipeline),可以尝试在特定阶段切回脚本式流水线写法。脚本式流水线在序列化控制上更为灵活,有时能自然规避此类问题。

示例:

node { stage('Process JSON') { def jsonResponse = sh(script: 'curl -s http://example.com/api/data', returnStdout: true).trim() def jsonSlurper = new groovy.json.JsonSlurper() def result = jsonSlurper.parseText(jsonResponse) println(result.key) // 在脚本式块内通常可直接使用 } }
-------------------------------------- 🚀 Powered by Moshow 郑锴- 🌟 Might the holy code be with you!-------------------------------------🔍 公众号 👉 软件开发大百科💻 CSDN 👉 https://zhengkai.blog.csdn.net📂 GitHub 👉 https://github.com/moshowgame

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1192038.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

统一数据访问平台设计方案 - DataHub

一、命名建议1. 整体平台命名DataHub Platform └── 符合Hub中心化的概念&#xff0c;强调这是数据的中枢平台2. 各数据中心API命名DataHub Global API (原UK) # 全球标准API DataHub China API (CN) # 中国区API DataHub India API (IN) # 印度区API3. 套壳平…

什么是MES?一文看懂MES的主要功能

在很多工厂里&#xff0c;我们依然能看到这样的场景&#xff1a;车间墙上挂着一块白板&#xff0c;手写当天的生产任务&#xff1b;班组长靠Excel登记产量和异常&#xff1b;设备出了故障&#xff0c;靠工人打电话通知维修&#xff1b;出现质量问题&#xff0c;追溯过程耗时数小…

开源语音情感识别新选择:Emotion2Vec+ Large落地应用趋势解析

开源语音情感识别新选择&#xff1a;Emotion2Vec Large落地应用趋势解析 1. Emotion2Vec Large语音情感识别系统二次开发实践 1.1 系统背景与核心价值 在智能客服、心理评估、教育反馈和内容审核等场景中&#xff0c;准确理解说话人的情绪状态正变得越来越重要。传统的语音情…

3步轻松实现原神帧率解锁:告别60帧限制的完整指南

3步轻松实现原神帧率解锁&#xff1a;告别60帧限制的完整指南 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 你是否曾在原神中转动视角时感到画面不够丝滑&#xff1f;明明拥有强大的硬…

verl early stopping机制:防止过拟合的部署配置

verl early stopping机制&#xff1a;防止过拟合的部署配置 1. verl 介绍 verl 是一个灵活、高效且可用于生产环境的强化学习&#xff08;RL&#xff09;训练框架&#xff0c;专为大型语言模型&#xff08;LLMs&#xff09;的后训练设计。它由字节跳动火山引擎团队开源&#…

参考资料哪里找?GLM-TTS官方文档精要整理

参考资料哪里找&#xff1f;GLM-TTS官方文档精要整理 1. 快速上手&#xff1a;三步启动你的语音合成服务 你是不是也遇到过这样的问题&#xff1a;想用AI生成一段自然的人声&#xff0c;却卡在环境配置、路径错误、依赖缺失的坑里&#xff1f;别急&#xff0c;今天我们不讲复…

Sharp-dumpkey创新方案:微信数据库密钥安全提取深度解析

Sharp-dumpkey创新方案&#xff1a;微信数据库密钥安全提取深度解析 【免费下载链接】Sharp-dumpkey 基于C#实现的获取微信数据库密钥的小工具 项目地址: https://gitcode.com/gh_mirrors/sh/Sharp-dumpkey 在当今数据安全日益重要的时代&#xff0c;微信作为国民级应用…

一键部署verl:5分钟搞定强化学习环境

一键部署verl&#xff1a;5分钟搞定强化学习环境 1. 为什么选择 verl&#xff1f; 你是不是也遇到过这样的问题&#xff1a;想用强化学习&#xff08;RL&#xff09;做 LLM 的后训练&#xff0c;但框架太复杂&#xff0c;配置动辄上百行&#xff0c;跑个 demo 都要半天&#…

从Excel到知识网络:SmartKG零代码智能图谱构建全攻略

从Excel到知识网络&#xff1a;SmartKG零代码智能图谱构建全攻略 【免费下载链接】SmartKG This project accepts excel files as input which contains the description of a Knowledge Graph (Vertexes and Edges) and convert it into an in-memory Graph Store. This proje…

GPU Burn终极指南:多GPU压力测试完整教程

GPU Burn终极指南&#xff1a;多GPU压力测试完整教程 【免费下载链接】gpu-burn Multi-GPU CUDA stress test 项目地址: https://gitcode.com/gh_mirrors/gp/gpu-burn GPU Burn是一款专业的NVIDIA显卡压力测试工具&#xff0c;能够同时对多个GPU进行极限性能测试和稳定性…

Glyph工业质检应用:缺陷图像分类系统部署案例

Glyph工业质检应用&#xff1a;缺陷图像分类系统部署案例 在现代制造业中&#xff0c;产品质量控制是决定企业竞争力的关键环节。传统的人工质检方式效率低、成本高&#xff0c;且容易受主观因素影响。随着AI技术的发展&#xff0c;智能视觉检测逐渐成为工业自动化的重要组成部…

GPEN能否跑在树莓派上?ARM架构移植实验记录

GPEN能否跑在树莓派上&#xff1f;ARM架构移植实验记录 1. 实验背景与目标 最近在研究图像修复和肖像增强技术时&#xff0c;接触到了一个非常实用的开源项目——GPEN&#xff08;Generative Prior ENhancement&#xff09;。它基于深度学习模型&#xff0c;能够对人脸照片进…

verl自动扩缩容:基于负载的GPU资源调整实战

verl自动扩缩容&#xff1a;基于负载的GPU资源调整实战 1. verl 介绍 verl 是一个灵活、高效且可用于生产环境的强化学习&#xff08;RL&#xff09;训练框架&#xff0c;专为大型语言模型&#xff08;LLMs&#xff09;的后训练设计。它由字节跳动火山引擎团队开源&#xff0…

原神帧率突破:开启高刷新率的视觉革命

原神帧率突破&#xff1a;开启高刷新率的视觉革命 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 你是否曾在原神的世界中畅游时&#xff0c;总觉得画面似乎被无形的枷锁束缚&#xff1f…

开发者必看:PyTorch-2.x预装依赖镜像免配置部署推荐

开发者必看&#xff1a;PyTorch-2.x预装依赖镜像免配置部署推荐 1. 镜像简介&#xff1a;开箱即用的深度学习开发环境 如果你还在为每次搭建 PyTorch 环境而烦恼——手动安装 CUDA、反复调试 cuDNN 版本、处理 pip 源慢、依赖冲突频发&#xff0c;那么这个镜像就是为你准备的…

Qwen3-0.6B容器化部署:Docker镜像定制与K8s编排实践

Qwen3-0.6B容器化部署&#xff1a;Docker镜像定制与K8s编排实践 Qwen3-0.6B 是阿里巴巴通义千问系列中轻量级但极具潜力的大语言模型&#xff0c;适用于边缘设备、开发测试环境以及资源受限场景下的快速推理任务。其体积小、响应快、语义理解能力均衡的特点&#xff0c;使其成…

Qwen3-Embedding-0.6B推理卡顿?显存优化部署实战案例分享

Qwen3-Embedding-0.6B推理卡顿&#xff1f;显存优化部署实战案例分享 在实际使用大模型进行文本嵌入任务时&#xff0c;很多开发者都会遇到一个共性问题&#xff1a;明明硬件资源看似充足&#xff0c;但模型推理却频繁卡顿&#xff0c;响应延迟高&#xff0c;甚至出现OOM&…

输入‘你是谁’,它回答‘由我开发’——太震撼了

输入‘你是谁’&#xff0c;它回答‘由我开发’——太震撼了 你有没有试过和一个大模型聊天&#xff0c;问它“你是谁”&#xff0c;结果它一本正经地告诉你&#xff1a;“我是阿里云研发的大语言模型”&#xff1f; 听起来很合理&#xff0c;但如果你希望它说“我由CSDN迪菲赫…

Live Avatar跑不动?5×24GB显卡无法运行的底层原因揭秘

Live Avatar跑不动&#xff1f;524GB显卡无法运行的底层原因揭秘 1. Live Avatar阿里联合高校开源的数字人模型 最近&#xff0c;由阿里巴巴与多所高校联合推出的开源项目Live Avatar引起了广泛关注。这是一个基于14B参数规模的大型生成模型&#xff0c;能够实现从文本、图像…

Hunyuan-MT-7B显存溢出?量化压缩部署实战解决方案

Hunyuan-MT-7B显存溢出&#xff1f;量化压缩部署实战解决方案 1. 为什么你的Hunyuan-MT-7B跑不起来&#xff1f; 你是不是也遇到过这种情况&#xff1a;满怀期待地部署了腾讯混元开源的最强翻译模型 Hunyuan-MT-7B&#xff0c;刚一启动就提示“CUDA out of memory”&#xff…