摘要
Jenkins 从 2.463 周版(计划于 2024 年 6 月 18 日发布)开始,将要求使用 Java 17 或更新版本。而 2.452.x LTS 系列将继续要求使用 Java 11 或更新版本,预计于 2024 年 7 月 24 日发布的 LTS 版本(可能是 2.462.1)也将采用这一要求,其基线版本为 2.462(最后一个支持 Java 11 的周版)或更早版本。第一个要求使用 Java 17 或更新版本的 LTS 版本将于 2024 年 10 月底发布。
Jenkins 核心团队通常建议所有用户采用 Java 17 或 Java 21。近几个月来,Java 17 的使用量几乎超过了 Java 11,而 Java 21 的使用量正在迅速增加。
由于 Spring Framework 5.3.x 系列将于 2024 年 8 月 31 日结束支持,Jenkins 将提前在 2024 年 6 月 18 日的周版中开始使用 Java 17,以降低升级风险。有关迁移到 Jetty 12 和 Jakarta EE 9 的更多细节将会后续公布。 从 Jenkins 2.463 周版开始,控制器 JVM(即运行 jenkins.war 的 JVM)和代理 JVM(即运行 remoting.jar 的 JVM)都需要使用 Java 17 或更新版本。但这并不意味着您需要使用相同版本的 Java 来构建应用程序。只要用于运行 Jenkins 本身的 JVM 是版本 17 或更新版本,您就可以继续使用任何所需的 JDK 来构建应用程序。 我们自 Jenkins 2.355 周版开始支持在 Java 17 上运行控制器,自 Jenkins 2.419 周版开始支持在 Java 21 上运行控制器。在 Jenkins 2.463 周版之前,尽管不推荐,但在 Java 17 上运行控制器和在 Java 11 上运行代理并不会导致错误。但从 Jenkins 2.463 周版开始,若控制器运行在 Java 17 而代理运行在 Java 11,将会出现以下错误:
代码语言:javascript复制java.lang.UnsupportedClassVersionError: hudson/slaves/SlaveComputer$SlaveVersion has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0
因此,在升级 Jenkins 到 2.463 周版之前,将控制器和代理升级到 Java 17 或更新版本至关重要。使用 Versions Node Monitors 插件来验证代理是否正在运行兼容的 Java 版本。 官方的 Jenkins Docker 镜像已经基于 Java 17 有几个月了,同时提供 Java 11 作为备用选项。从 Jenkins 2.462 周版开始,Java 11 镜像将不再提供(直到 2024 年 10 月,LTS 系列的 Java 11 镜像仍然可用)。使用官方 Jenkins Docker 镜像的用户无需自行安装或配置 Java,因为镜像中已预装了 Java。 如果您使用 Docker 镜像同时运行代理 Java 进程(即 remoting.jar)和需要 Java 8 或 11 构建的应用程序,您需要为 Jenkins 代理进程提供 Java 17 或更新版本的运行时,并为应用程序构建提供 Java 8 或 11 的环境。 使用 Debian、Red Hat 和 SUSE Linux 发行版的官方 Jenkins OS 包的用户应注意,这些包对 Java 供应商保持中立。换句话说,您需要自行安装 Java 包。最简单的方法是从 Linux 发行版安装 Java 17,如下所示:
- Debian:
apt-get install fontconfig openjdk-17-jre
- Red Hat:
yum install fontconfig java-17-openjdk
- openSUSE:
zypper install dejavu-fonts fontconfig java-17-openjdk
安装合适的 Java 版本后,配置 Jenkins 使用该 Java 运行时。最简单的方法是将该版本的 Java 配置为操作系统(OS)级别的默认 Java 版本。
如果发现插件中有回归问题,请在 Jira 中提交错误报告,并包含以下信息:使用 JENKINS-67907 史诗,提供 java -version
的输出,操作系统的名称、版本和架构,已安装插件的完整列表,相关的完整堆栈跟踪以及复现问题的步骤。
我们预计迁移到 Java 17、Jetty 12 和 Jakarta EE 9 会出现一些中断,但我们希望从长远来看,这些变化将符合 Jenkins 社区的最好利益。如有任何问题或建议,请在开发者列表中提出。