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

升级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启动配置:

  1. 修改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序列化可能涉及的其他模块权限,避免后续出现同类问题。
  2. 验证参数生效状态

    • 重启Tomcat后,进入Jenkins系统信息页面(Manage Jenkins -> System Information)
    • 在JVM Arguments项中确认是否包含上述-add-opens参数。
  3. 排查插件兼容性

    • 尽管插件已升级至最新版,部分旧插件仍可能存在JDK 17兼容性问题
    • 可临时禁用非核心插件,逐一排查是否有插件导致序列化失败
    • 重点关注与构建历史、序列化相关的插件(如Pipeline、Build Timestamp等)。
  4. 检查Jenkins数据目录权限

    • 确保JDK 17运行的Tomcat进程对Jenkins数据目录(包含builds文件夹)拥有读写权限
    • Windows环境下,需确认Tomcat服务的运行账号拥有该目录的完全控制权限。
补充说明

Jenkins从JDK 11切换到JDK 17时,受Java模块系统限制,需明确开放相关模块给未命名模块(Jenkins及部分插件仍采用传统类加载方式)。Tomcat的CATALINA_OPTS是传递JVM参数给进程的可靠方式,相比系统环境变量更直接有效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 19:25:04