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

升级Java至21后Jenkins控制器抛出HTTP 500错误求助

问题:Jenkins 2.504.3升级JDK至21后出现HTTP 500错误

环境信息

  • Jenkins版本:2.504.3
  • 服务器系统:Ubuntu
  • 当前稳定运行JDK:OpenJDK 17
  • 升级目标JDK:OpenJDK 21

错误详情

升级JDK至21后,访问Jenkins触发HTTP 500错误,完整栈信息如下:

HTTP ERROR 500 jakarta.servlet.ServletException: org.apache.commons.jelly.JellyTagException: jar:file:/var/cache/jenkins/war/WEB-INF/lib/jenkins-core-2.504.3.jar!/lib/layout/view.jelly:42:20: <d:invokeBody> class hudson.security.csrf.DefaultCrumbIssuer is missing its descriptor URI: / STATUS: 500 MESSAGE: jakarta.servlet.ServletException: org.apache.commons.jelly.JellyTagException: jar:file:/var/cache/jenkins/war/WEB-INF/lib/jenkins-core-2.504.3.jar!/lib/layout/view.jelly:42:20: <d:invokeBody> class hudson.security.csrf.DefaultCrumbIssuer is missing its descriptor SERVLET: Stapler CAUSED BY: org.apache.commons.jelly.JellyTagException: jar:file:/var/cache/jenkins/war/WEB-INF/lib/jenkins-core-2.504.3.jar!/lib/layout/view.jelly:42:20: <d:invokeBody> class hudson.security.csrf.DefaultCrumbIssuer is missing its descriptor CAUSED BY: java.lang.AssertionError: class hudson.security.csrf.DefaultCrumbIssuer is missing its descriptor Caused by: org.apache.commons.jelly.JellyTagException: jar:file:/var/cache/jenkins/war/WEB-INF/lib/jenkins-core-2.504.3.jar!/lib/layout/view.jelly:42:20: <d:invokeBody> class hudson.security.csrf.DefaultCrumbIssuer is missing its descriptor at org.apache.commons.jelly.impl.TagScript.handleException(TagScript.java:744)


原因分析
  1. JDK21反射限制适配不足:JDK21强化了模块系统的反射访问规则,而Jenkins 2.504.3的核心代码未针对该规则做完整适配,导致hudson.security.csrf.DefaultCrumbIssuer的Descriptor(Jenkins扩展点核心依赖)无法通过反射正常加载,触发断言错误。
  2. 核心类元数据加载异常:JDK21的类加载机制变化,使得Jenkins核心无法找到该类的Descriptor元数据,最终引发500级别的Servlet异常。

解决方法

方法1:添加JVM启动参数放宽反射限制

在Jenkins启动配置中追加以下JVM参数,适配JDK21的反射规则:

--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/java.io=ALL-UNNAMED
--add-opens java.base/java.util=ALL-UNNAMED
--add-opens java.base/java.util.concurrent=ALL-UNNAMED

配置步骤(Ubuntu):

  • 编辑Jenkins启动配置文件:sudo nano /etc/default/jenkins
  • 找到JAVA_ARGS行,将上述参数追加到现有值后
  • 保存文件并重启Jenkins:sudo systemctl restart jenkins

方法2:升级Jenkins至完全兼容JDK21的版本

若添加参数后问题仍存在,建议升级到**Jenkins 2.414.3+(LTS)**或更高版本——这些版本针对JDK21做了全面兼容性优化,彻底修复了核心类的反射访问问题。

升级步骤(Ubuntu):

  1. 备份Jenkins数据目录:sudo cp -r /var/lib/jenkins /var/lib/jenkins_backup
  2. 更新源并执行升级:
sudo apt update
sudo apt install jenkins
  1. 验证Jenkins运行状态:sudo systemctl status jenkins

方法3:确认JDK21安装与配置正确性

确保OpenJDK21安装完整,且Jenkins指向正确的JDK路径:

  • 查看系统可用JDK列表:update-alternatives --config java
  • 在/etc/default/jenkins中设置正确的JAVA_HOME:JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64(路径根据实际安装情况调整)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 14:55:07