升级Jenkins至JDK 17后任务无法生成build.xml求助
问题描述
- Jenkins环境:Windows + Tomcat部署,Jenkins版本2.462.2,所有插件已升级至最新版
- 核心现象:从JDK 11切换到JDK 17后,Jenkins启动正常,但运行任务重启后新任务构建历史消失;任务
builds文件夹无build.xml文件;运行新任务时临时显示构建号,磁盘重新加载后历史丢失;切回JDK 11后功能恢复正常。 - 关键错误日志:序列化
hudson.model.AbstractBuild#culprits失败,根源为Java模块权限问题:module java.base未向未命名模块开放java.util - 已尝试操作:添加环境变量
JDK_JAVA_OPTIONS,值为"-add-opens java.base/java.lang=ALL-UNNAMED -add-opens java.base/java.util=ALL-UNNAMED",执行java -version时参数生效,但运行任务时错误仍存在。
解决方案
针对Tomcat部署的Jenkins,系统环境变量JDK_JAVA_OPTIONS可能无法被Tomcat正确传递给Jenkins进程,需直接修改Tomcat启动配置:
修改Tomcat的catalina.bat(Windows环境)
- 找到Tomcat安装目录下的
bin\catalina.bat文件 - 在文件开头添加以下配置:
set CATALINA_OPTS=-add-opens java.base/java.lang=ALL-UNNAMED -add-opens java.base/java.util=ALL-UNNAMED -add-opens java.base/java.io=ALL-UNNAMED -add-opens java.base/java.net=ALL-UNNAMED - 额外添加
java.io和java.net是为覆盖Jenkins序列化可能涉及的其他模块权限,避免后续出现同类问题。
- 找到Tomcat安装目录下的
验证参数生效状态
- 重启Tomcat后,进入Jenkins系统信息页面(
Manage Jenkins -> System Information) - 在
JVM Arguments项中确认是否包含上述-add-opens参数。
- 重启Tomcat后,进入Jenkins系统信息页面(
排查插件兼容性
- 尽管插件已升级至最新版,部分旧插件仍可能存在JDK 17兼容性问题
- 可临时禁用非核心插件,逐一排查是否有插件导致序列化失败
- 重点关注与构建历史、序列化相关的插件(如
Pipeline、Build Timestamp等)。
检查Jenkins数据目录权限
- 确保JDK 17运行的Tomcat进程对Jenkins数据目录(包含
builds文件夹)拥有读写权限 - Windows环境下,需确认Tomcat服务的运行账号拥有该目录的完全控制权限。
- 确保JDK 17运行的Tomcat进程对Jenkins数据目录(包含
补充说明
Jenkins从JDK 11切换到JDK 17时,受Java模块系统限制,需明确开放相关模块给未命名模块(Jenkins及部分插件仍采用传统类加载方式)。Tomcat的CATALINA_OPTS是传递JVM参数给进程的可靠方式,相比系统环境变量更直接有效。
内容的提问来源于stack exchange,提问作者Jim OShea
相关产品推荐
相关产品推荐

