如何修复Jenkins流水线抛出的java.lang.RuntimeException: Error creating extended parser class: null错误
Jenkins流水线Parboiled解析异常排查修复方案
错误链路与根因拆解
原始报错栈:
java.lang.IllegalStateException at org.objectweb.asm.tree.analysis.BasicInterpreter.<init>(BasicInterpreter.java:66) at org.parboiled.transform.RuleMethodInterpreter.<init>(RuleMethodInterpreter.java:42) at org.parboiled.transform.InstructionGraphCreator.process(InstructionGraphCreator.java:41) at org.parboiled.transform.ParserTransformer.runMethodTransformers(ParserTransformer.java:62) at org.parboiled.transform.ParserTransformer.extendParserClass(ParserTransformer.java:45) at org.parboiled.transform.ParserTransformer.transformParser(ParserTransformer.java:39) at org.parboiled.Parboiled.createParser(Parboiled.java:54) Caused: java.lang.RuntimeException: Error creating extended parser class: null at org.parboiled.Parboiled.createParser(Parboiled.java:58) at org.jenkinsci.plugins.tokenmacro.Parser.process(Parser.java:80) at org.jenkinsci.plugins.tokenmacro.Parser.process(Parser.java:74) at org.jenkinsci.plugins.tokenmacro.TokenMacro.expand(TokenMacro.java:199) at org.jenkinsci.plugins.tokenmacro.TokenMacro.expandAll(TokenMacro.java:237) at org.jenkinsci.plugins.tokenmacro.TokenMacro.expandAll(TokenMacro.java:207) at org.jenkinsci.lib.configprovider.model.ConfigFileManager.provisionConfigFile(ConfigFileManager.java:98) at org.jenkinsci.plugins.configfiles.buildwrapper.ManagedFileUtil.provisionConfigFiles(ManagedFileUtil.java:82) at org.jenkinsci.plugins.configfiles.buildwrapper.ConfigFileBuildWrapper.setUp(ConfigFileBuildWrapper.java:61) at org.jenkinsci.plugins.workflow.steps.CoreWrapperStep$Execution2.doStart(CoreWrapperStep.java:97) at org.jenkinsci.plugins.workflow.steps.GeneralNonBlockingStepExecution.lambda$run$0(GeneralNonBlockingStepExecution.java:77) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834) Finished: FAILURE
根因说明:异常触发在流水线配置文件挂载(ConfigFileBuildWrapper)阶段,调用token-macro插件执行文本宏替换时,底层parboiled解析器在动态生成解析类的过程中初始化失败。核心触发因素为ASM字节码操作库版本不兼容:老旧版本parboiled依赖低版本ASM实现类转换逻辑,当运行环境中ASM类版本不匹配、或JDK版本过高导致类文件结构超出旧ASM的解析能力时,BasicInterpreter初始化阶段会直接抛出无详情的IllegalStateException,这也是报错没有附带明确错误描述的原因。
排查与修复步骤
- 先锁定近期变更项
针对此前正常运行、突然报错的场景,优先排查近1-2天的环境变更记录:包括Jenkins控制器JDK版本调整、插件自动/手动升级、工具链版本切换,快速缩小排查范围。 - 升级关联插件到兼容版本
按依赖顺序依次升级插件稳定适配版本,解决旧版parboiled的兼容问题:- 优先升级
token-macro插件到122.v09cb_a_fe912fa及以上版本,该版本移除了对老旧parboiled库的依赖,替换为适配新ASM的解析实现,从根源消除类转换异常 - 同步升级
config-file-provider插件到943.v79d1ec3e7b_4c及以上版本,匹配token-macro的依赖链路 - 升级
workflow-step-api、structs等基础依赖插件到最新稳定版,保证插件类加载隔离机制正常生效,避免不同插件的类版本串用
- 优先升级
- 排查ASM类版本冲突
登录Jenkins控制器服务器,遍历$JENKINS_HOME/plugins/*/lib/目录下的所有jar包,搜索是否存在多个不同大版本的asm-*.jar文件。如果存在版本混杂(比如同时存在asm-5.x和asm-9.x的jar包),可暂时停用引入不匹配ASM版本的老旧插件,确保类加载时优先匹配parboiled依赖的ASM版本;临时无法升级插件时,可在Jenkins启动参数中调整类加载优先级,指定parboiled自带的ASM包优先加载。 - 修复后验证
所有调整完成后重启Jenkins控制器,重新触发之前报错的流水线作业,确认配置文件挂载阶段的宏替换逻辑正常执行,无parboiled初始化异常即可。
内容的提问来源于stack exchange,提问作者sambit
相关产品推荐
相关产品推荐

