Jenkins任务发送邮件报错:序列化异常问题排查求助
Jenkins邮件发送触发序列化错误排查方案
问题根源分析
报错堆栈明确指向java.util.regex.Matcher不可序列化——虽然你贴出的代码里echo是注释状态,但Jenkins流水线会保存上下文变量,只要某个变量引用了不可序列化的Matcher对象,后续步骤(哪怕是注释过的代码曾经运行过)都可能触发序列化异常,最终表现为EchoStep无法接收非String类型的参数。
排查与修复步骤
- 检查所有正则表达式操作:如果你用了
=~或者find()这类方法获取过Matcher对象,不要直接把Matcher赋值给变量(比如email、job这类后续会用于字符串插值的变量),必须调用group(n)、toString()等方法转换成String类型。
错误示例:
正确示例:def emailMatcher = inputStr =~ /email: (\S+)/ def email = emailMatcher // 直接保留Matcher对象,不可序列化def emailMatcher = inputStr =~ /email: (\S+)/ def email = emailMatcher.find() ? emailMatcher.group(1) : "" // 转换成String - 验证插值变量类型:确保
email、result、job、url全都是String类型,而非其他不可序列化对象。可以在使用前强制转换:def emailStr = email.toString() def resultStr = result.toString() def jobStr = job.toString() def urlStr = url.toString() def email_response = mail (to: emailStr, subject: "Jenkins build:${resultStr}: ${jobStr}", body: "${resultStr}: Job: ${jobStr}\nMore Info can be found here: ${urlStr}") - 清理流水线上下文:如果是注释代码遗留的旧变量问题,可以重启Jenkins流水线任务,或者重新定义所有变量,避免上下文残留不可序列化对象。
内容的提问来源于stack exchange,提问作者Gaurav S
相关产品推荐
相关产品推荐

