You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins升级后JobDSL脚本抛出ClassCastException问题求助

Jenkins升级后JobDSL脚本ClassCastException问题排查建议

问题背景

  • 升级前环境:Jenkins 2.289.3 + JobDSL v1.77
  • 升级后环境:Jenkins 2.346.3 + JobDSL v1.81(同步更新所有插件)
  • 问题现象:运行前同事编写的JobDSL脚本创建文件夹及下属任务时失败,抛出如下ClassCastException:
java.lang.ClassCastException: class org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject cannot be cast to class hudson.model.Job (org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject is in unnamed module of loader jenkins.util.AntClassLoader @2cd50a1b; hudson.model.Job is in unnamed module of loader org.eclipse.jetty.webapp.WebAppClassLoader @672872e1)
    at com.atlassian.bitbucket.jenkins.internal.trigger.BitbucketWebhookTriggerImpl.start(BitbucketWebhookTriggerImpl.java:47)
    at com.cloudbees.hudson.plugins.folder.computed.ComputedFolder.init(ComputedFolder.java:199)
    at com.cloudbees.hudson.plugins.folder.AbstractFolder.onLoad(AbstractFolder.java:545)
    at com.cloudbees.hudson.plugins.folder.computed.ComputedFolder.onLoad(ComputedFolder.java:221)
    at jenkins.branch.MultiBranchProject.onLoad(MultiBranchProject.java:179)
    at org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject.onLoad(WorkflowMultiBranchProject.java:84)
    at hudson.model.AbstractItem$1.call(AbstractItem.java:904)
    at hudson.model.AbstractItem$1.call(AbstractItem.java:902)
    at hudson.model.Items.whileUpdatingByXml(Items.java:132)
    at hudson.model.AbstractItem.updateByXml(AbstractItem.java:902)
    at javaposse.jobdsl.plugin.JenkinsJobManagement.updateExistingItem(JenkinsJobManagement.java:482)
    at javaposse.jobdsl.plugin.JenkinsJobManagement.createOrUpdateConfig(JenkinsJobManagement.java:169)
    at javaposse.jobdsl.dsl.JobManagement$createOrUpdateConfig$2.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at javaposse.jobdsl.dsl.JobManagement$createOrUpdateConfig$2.call(Unknown Source)
    at javaposse.jobdsl.plugin.InterruptibleJobManagement.createOrUpdateConfig(InterruptibleJobManagement.groovy:35)
    at javaposse.jobdsl.dsl.JobManagement$createOrUpdateConfig$2.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at javaposse.jobdsl.dsl.JobManagement$createOrUpdateConfig$2.call(Unknown Source)
    at javaposse.jobdsl.dsl.AbstractDslScriptLoader$_extractGeneratedJobs_closure4.doCall(AbstractDslScriptLoader.groovy:204)
    at jdk.internal.reflect.GeneratedMethodAccessor385.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034)
    at groovy.lang.Closure.call(Closure.java:420)
    at groovy.lang.Closure.call(Closure.java:436)
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2125)
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2110)
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2151)
    at org.codehaus.groovy.runtime.dgm$163.invoke(Unknown Source)

核心问题分析

从异常栈可以看出,WorkflowMultiBranchProject被强制转换为hudson.model.Job失败,且两个类来自不同的类加载器,这说明是类加载隔离或插件兼容性问题,大概率和Bitbucket插件、多分支流水线插件的版本匹配有关。

调试与解决步骤

  • 检查Bitbucket插件兼容性:异常触发点在BitbucketWebhookTriggerImpl.start(),说明Bitbucket插件和升级后的Jenkins/多分支流水线插件不兼容。进入Jenkins插件管理页面查看Bitbucket插件版本,确保其适配Jenkins 2.346.3,建议升级到最新兼容版本。
  • 验证多分支流水线插件版本:WorkflowMultiBranchProject属于流水线多分支插件,确认该插件版本与Jenkins核心、JobDSL版本匹配。可尝试重新安装该插件,清理插件缓存后重启Jenkins。
  • 排查JobDSL脚本中的多分支任务定义:
    • 检查脚本中创建多分支任务的代码,是否使用了过时API。对比升级后的JobDSL API文档,替换为当前支持的写法。
    • 简化脚本,只保留创建基础多分支任务的代码,验证是否能成功运行,逐步排查脚本中导致问题的部分。
  • 排查类加载器冲突:
    • 进入Jenkins的Manage Jenkins > Script Console,执行以下脚本查看类加载情况:
      println "WorkflowMultiBranchProject loader: " + org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject.class.classLoader
      println "Job loader: " + hudson.model.Job.class.classLoader
      
    • 如果两个类加载器不同,清理Jenkinsplugins/目录下的旧插件残留(如已卸载插件的jar包),然后重启Jenkins。
  • 重新生成任务配置:删除现有出错的文件夹和任务,用JobDSL脚本重新创建,避免旧配置文件与新版本插件的兼容性冲突。
  • 查看系统日志:进入Manage Jenkins > System Log查看更详细的错误日志,寻找插件初始化失败、类加载异常的前置信息,辅助定位具体冲突插件。

内容的提问来源于stack exchange,提问作者Raghu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:45:33