Jenkins升级后解压异常:ClassCastException与NotSerializableException
问题解决方案
一、解决AntBuilder的ClassCastException
Jenkins LTS 2.346.x升级后,Ant类加载机制或依赖版本发生变化,直接实例化AntBuilder会触发类型转换异常,推荐改用官方Ant插件提供的ant步骤:
- 确保Ant插件已更新至适配2.346.2 LTS的版本
- 在流水线中直接调用ant的unzip任务,示例代码:
ant.unzip(src: 'path/to/your/file.zip', dest: 'target/unzip/dir')
二、解决NotSerializableException
该异常源于Jenkins流水线的快照序列化机制——即使解压操作成功,若上下文存在非序列化对象,后续快照保存时会失败。以下是两种解压方式的针对性处理:
1. 针对pipeline-utility-steps的unzip命令
避免将unzip的返回值保留在流水线全局上下文,或用@NonCPS标记处理逻辑(该标记会让方法跳过Jenkins序列化流程):
@NonCPS def unzipWithUtilitySteps() { unzip zipFile: 'path/to/your/file.zip', target: 'target/unzip/dir' } // 流水线中调用方法 unzipWithUtilitySteps()
2. 针对sh命令解压
同理,不要将sh执行的返回结果赋值给需要序列化的变量,或用@NonCPS包裹执行逻辑:
@NonCPS def unzipWithShell() { sh 'unzip path/to/your/file.zip -d target/unzip/dir' } // 流水线中调用方法 unzipWithShell()
三、通用排查与验证
- 查看Jenkins系统日志,定位
NotSerializableException指向的具体类,直接处理该非序列化对象 - 确认所有流水线相关插件(pipeline-utility-steps、Pipeline: Basic Steps等)均更新至2.346.2 LTS兼容的最新版本
- Docker容器环境下,检查工作目录挂载权限,确保Jenkins有权限读写解压目录,避免因文件权限导致的隐式上下文异常
内容的提问来源于stack exchange,提问作者Sarojini Reddy
相关产品推荐
相关产品推荐

