Jenkins升级至2.426.3后无法保存系统配置的问题求助
解决Jenkins迁移后保存系统配置失败的问题
问题描述
从EC2部署的Jenkins 2.346.2迁移至Docker容器的2.426.3版本,已复制作业数据、插件目录并更新所有插件,但修改系统配置中的Jenkins URL时无法保存,报错日志如下:
2024-03-14 18:32:45.045+0000 [id=30] WARNING o.e.j.s.h.ContextHandler$Context#log: Error while serving http://jenkins-stag.mgmt.dev.appzen.com/manage/configSubmit java.lang.IllegalArgumentException: The frontend sent an unexpected list of classes (["org.jenkins_ci.plugins.any_buildstep.builder.BuilderLister","org.jenkinsci.plugins.conditionalbuildstep.lister.DefaultBuilderDescriptorLister"]) rather than an expected single class. See https://www.jenkins.io/doc/developer/views/table-to-div-migration/ for more information. at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:750) Caused: java.lang.IllegalArgumentException: Failed to instantiate interface org.jenkinsci.plugins.conditionalbuildstep.lister.BuilderDescriptorLister from {"stapler-class":["org.jenkins_ci.plugins.any_buildstep.builder.BuilderLister","org.jenkinsci.plugins.conditionalbuildstep.lister.DefaultBuilderDescriptorLister"],"$class":["org.jenkins_ci.plugins.any_buildstep.builder.BuilderLister","org.jenkinsci.plugins.conditionalbuildstep.lister.DefaultBuilderDescriptorLister"]} at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:771) at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:551) at org.kohsuke.stapler.RequestImpl.instantiate(RequestImpl.java:877) Caused: java.lang.IllegalArgumentException: Failed to convert the builderLister parameter of the constructor public org.jenkinsci.plugins.conditionalbuildstep.singlestep.SingleConditionalBuilder$SingleConditionalBuilderDescriptor(org.jenkinsci.plugins.conditionalbuildstep.lister.BuilderDescriptorLister) at org.kohsuke.stapler.RequestImpl.instantiate(RequestImpl.java:879) at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:768) Caused: java.lang.IllegalArgumentException: Failed to instantiate class org.jenkinsci.plugins.conditionalbuildstep.singlestep.SingleConditionalBuilder$SingleConditionalBuilderDescriptor from {"":"0","builderLister":{"stapler-class":["org.jenkins_ci.plugins.any_buildstep.builder.BuilderLister","org.jenkinsci.plugins.conditionalbuildstep.lister.DefaultBuilderDescriptorLister"],"$class":["org.jenkins_ci.plugins.any_buildstep.builder.BuilderLister","org.jenkinsci.plugins.conditionalbuildstep.lister.DefaultBuilderDescriptorLister"]}} at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:771) at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:551) at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:546) at org.jenkinsci.plugins.conditionalbuildstep.singlestep.SingleConditionalBuilder$SingleConditionalBuilderDescriptor.configure(SingleConditionalBuilder.java:146) at jenkins.model.Jenkins.configureDescriptor(Jenkins.java:4097) at jenkins.model.Jenkins.doConfigSubmit(Jenkins.java:4061) at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:732) at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:397) Caused: java.lang.reflect.InvocationTargetException
解决方案
- 定位冲突根源:错误由
conditionalbuildstep和any-buildstep插件的BuilderLister实现冲突导致,新版本Jenkins的Stapler组件要求单个类实例,而前端提交了两个类的列表。 - 卸载冲突插件:进入Jenkins插件管理页面,找到
any-buildstep插件并卸载,完成后重启Jenkins容器。 - 适配目标版本:检查
conditionalbuildstep插件版本,确保安装的是适配Jenkins 2.426.3的最新稳定版,若版本过低则更新后重启。 - 清理配置残留(可选):若卸载插件后仍无法保存,进入Docker容器内的Jenkins配置目录(默认
/var/jenkins_home),打开config.xml文件,搜索并删除包含builderLister的冲突配置段,保存后重启容器。 - 重新尝试保存:完成上述操作后,再次进入系统配置页面修改Jenkins URL,提交保存即可。
内容的提问来源于stack exchange,提问作者Swapnil Jadhav
相关产品推荐
相关产品推荐

