NOTE: 这是由 Java 11 支持团队 联合撰写的博客。 在 12 月 18 号(UTC时间下午4点)咱们也会在 Jenkins 在线 Meetup 展现对 Java 11 的预览支持。java
Jenkins 做为领先的开源自动化服务器之一,目前仍然只支持到 Java 8。在 9 月 25 日 OpenJDK 11 发布了。这是一个长期支持版本,并将持续多年,咱们想要在 Jenkins 项目中对这个版本进行全面的支持。在过去的一年中,许多贡献者一直致力于在项目中支持 Java 11(Jenkins JEP-211)。这是一条艰辛的道路,可是如今,表明 Jenkins Platform SIG,咱们很高兴地宣布在 Jenkins 每周发布提供 Java 11 预览!docker
为何咱们须要 Java 11 的预览?api
这是由于它能够提供给 Jenkins 贡献者和早期使用者一个在明年年初(译者注:此文发布于 2018 年)GA 发布以前尝试这些变化的途径。它也能够帮助咱们进行更多的探索性测试,而且有但愿在 Jenkins 正式地提供 Java 11 支持以前,解决大部分的问题。 在这篇文章中,咱们将会介绍如何在 Java 11 环境下运行 Jenkins,还有如何调查兼容性问题并报告它们。安全
背景bash
你可能还记得,在 2018 年 6 月咱们举办了一个针对 Java 10+ 支持的在线黑客马拉松。做为黑客马拉松的一部分,咱们提供了 Java 11 的实验性支持。此次活动对咱们来讲很是成功。咱们能够在 Java 10 和 Java 11-ea 环境下运行 Jenkins 以及一些主要的功能 —— 包括流水线、JobDSL、Docker/Kubernetes plugin、Configuration as Code、BlueOcean 等。它让咱们相信咱们能够在 Jenkins 中提供Java 11支持而不会发生破坏性变化。在这场马拉松以后 Oleg Nenashev 建立了 "Java 10+ support in Jenkins"(以后修改成只针对支持 Java 11)。Jenkins Platform SIG 也已成立,以协调 Java 11 的支持工做和其余平台的支持工做(打包,操做系统支持等)。 一组贡献者一直持续致力于 Java 11 支持,他们主要在关注上游的功能性补丁、在开发工具中提供 Java 11 支持、测试和解决已知的兼容性问题。详细的状态的更新,请参阅 Platform SIG 的会议记录。从 Jenkins 2.148 开始,Jenkins 在多个不一样的 Linux 和 Windows 平台下成功的在最新的 OpenJDK 11 版本下运行。咱们进行了大量的自动化和探索性测试,除了一些例外(见下文),大部分 Jenkins 插件运行良好。GA 版本发布须要的自动化测试工做还在进行,可是咱们已经成功的运行了 Jenkins core 的测试,经过了所有的 Acceptance Test Harness,以及在推荐插件上运行经过了 Plugin Compat Tester。咱们也部署了一个临时的为 Java 11 搭建的 Experimental Update Center,能够为 Java 11 的早期采用者提供快速的问题修复。使用Java 11 运行时,Jenkins 2.155+ 将会默认使用此更新中心,这就是咱们宣布此版本的预览可用性的缘由。 在 2018 年 11 月 19 日,咱们在 Platform SIG 会议的幻灯片上展现了当前的 Java 11 支持的状态,咱们赞成发布 Java 11 的可用性预览,以便咱们能够提供内容让 Jenkins 用户得以进行评估。 在 12 月 4 日的下一次会议上,全部障碍都已获得解决,Platform SIG 会议签署发布了Java 11 预览版。服务器
在 Docker 中运行 Jenkins 和 Java 11ssh
从 Jenkins 2.155 开始,咱们开始为 Jenkins master 和 agent 提供 Docker 镜像。 全部这些镜像都基于官方的由 Docker 社区维护的 openjdk:11-jdk 镜像。这里有一些关于迁移到其余基本镜像的讨论,可是咱们决定在预览可用性的范围中将其排除。基于一样的缘由,咱们目前不提供 Alpine 镜像。ide
Jenkins master 镜像工具
官方的 jenkins/jenkins 镜像如今已经提供了 Java 11 的支持。你能够像下面这样简单在 Java 11 的环境中运行 Jenkins。开发工具
docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins:jdk11
复制代码
可使用下面这些标签: jdk11 - 最新的包含 Java 11 支持的每周发布 2.155-jdk11 - 包含 Java 11 支持的每周发布 这些镜像彻底和 jenkins/jenkins documentation 兼容。例如:你可使用 plugins.txt 来安装插件、挂载卷或者经过环境变量传递额外选项。
Agent 镜像
若是你经过 Docker 或 Kubernetes 插件使用容器化的 agent,咱们也发布了 Jenkins agent 的官方 Docker 镜像: jenkins/slave jenkins/jnlp-slave jenkins/ssh-slave 全部的镜像均可以使用 latest-jdk11 标签来获取 JDK 11 的捆绑。同时为这些过期的名字抱歉! ** 实验性 Jenkins master 镜像**
为了简化测试,咱们也在 DockerHub 提供了一些实验性的镜像。 对于这些镜像,咱们为其搭建好了持续交付流水线,因此不须要等待 Jenkins 的每周发布,就能够得到补丁。 jenkins4eval/blueocean-platform-support - 等同于 jenkinsci/blueocean 标签: latest-jdk11 这个镜像捆绑了在 Java 11 上运行时须要的全部的 Jenkins 流水线和 Blue Ocean 的补丁 若是你想要使用流水线,使用这个镜像 jenkins/jenkins-experimental - 等同于 jenkins/jenkins 标签: latest-jdk11 这个镜像是从 Jenkins core 的 java11-support 分支中发布的 这个分支可能轻微的领先或落后于 master 分支,咱们可能会用这个分支去快速发布补丁给 Java 11 用户 咱们最终会把这个实验性流水线移到新的在 jep:217 中建立的 jenkins4eval 组织中去。
在 Java 11 中运行 jenkins.war
在 Docker 外运行 Jenkins 并无那么简单。这是由于 Jenkins 依赖一些在 Java 11 中已经被移除的模块。咱们计划在 GA 发布中以某种方式解决掉这个问题 (参见 JENKINS-52186),可是如今,咱们还须要一些手动操做才能在 Java 11 中运行 Jenkins WAR。 下载 2.155 版本的 Jenkins WAR 下载下面这些库到 jenkins.war 所在的目录中去 jaxb-api-2.3.0.jar (保存为 jaxb-api.jar) jaxb-core-2.3.0.1.jar (保存为 jaxb-core.jar) jaxb-impl-2.3.0.1.jar (保存为 jaxb-impl.jar) javax.activation v.1.2.0 (保存为 javax.activation.jar)
运行下列命令
Run Jenkins with ${JAVA11_HOME}/bin/java \
-p jaxb-api.jar:javax.activation.jar --add-modules java.xml.bind,java.activation \
-cp jaxb-core.jar:jaxb-impl.jar \
-jar jenkins.war --enable-future-java --httpPort=8080 --prefix=/jenkins
复制代码
已知的兼容性问题
为了帮助用户追踪兼容性问题,咱们新建立了 Known Java 11 Compatibility Issues wiki 页面。 几个重要的问题和障碍: Pipeline: Support Plugin 有一个已知的在 Java 11 中运行会产生的上下文持久性问题 (JENKINS-51998) 咱们已经在 Experimental Update Center for Java 11 中部署了一个临时的修复版本。修复版本号: 3.0-java11-alpha-1。 若是你使用 Jenkins 流水线,请确认你使用了这个版本,不然你的 Job 会几乎当即失败 当你更新实例到 Java 11 时,请确认没有正在运行的流水线。 JENKINS-54305 - JDK Tool Plugin 不提供 JDK 11 的安装器 JENKINS-52282 - Java Web Start 在 Java 11 中已经再也不可用, 因此咱们再也不可能在网页图形界面中启动 agent。咱们也没有计划提供一个替代品。 咱们也在其它插件中发现了一些次要的不兼容问题,可是咱们不认为它们对于预览可用性来讲是一个阻碍。
报告兼容性问题
若是你碰到了任何有关 Java 11 兼容性的问题,请在咱们的 bug 跟踪工具中报告问题。并为这类问题添加 java11-compatibility 标签,这样它们会自动出如今 wiki 页面中,并被分级。 对于安全性问题,请使用标准的 漏洞报告流程。尽管咱们在预览发布时,会公开修复 Java 11 相关的问题,可是遵照这个安全流程也会帮助咱们调查它对 Java 8 用户的影响。
Java 11 支持团队
一旦 Java 11 支持发布,咱们但愿会有插件和 Jenkins core 的回归 (regression)报告。咱们关心的部分之一就是不一样平台的本地库,还有其它的 Java 的版本的问题。一样,这里也存在第三方库和 Java 11 不兼容的风险。为了减轻这些风险,咱们建立了 Java 11 支持团队。这个团队将会专一于对到来的问题进行分级、帮助 review PR、在一些状况下也会修复问题。这个团队的工做流程可在 JEP-211 文档中看到。 咱们不但愿 Java 11 支持团队 去修复全部的发现的问题,咱们将会和 Jenkins core 和插件的维护者一块儿解决它们。假如你有兴趣加入这个团队,能够在 Platform SIG Gitter Channel 中联系咱们。
贡献
咱们感谢任何一种对 Java 11 支持的贡献, 包括在 Java 11 下运行 Jenkins,报告和解决兼容性问题。 假如你想要进行一些探索性测试,咱们推荐你在你的其中一个测试实例中尝试 Java 11 支持。咱们对这样的测试感激涕零。咱们在上面提供了问题报告的准则。 假如你是一个插件的开发者/维护者,咱们很是感谢你能在 Java 11 中测试你的插件。为了帮助你,咱们建立了 Java 11 Developer guidelines。这个页面阐述了如何在 Java 11 下测试你的插件,同时它也列出了在开发工具中的已知的问题。 不管你作什么,请经过向 Platform SIG mailing list 发送邮件告诉咱们你的体验。这些信息将帮助咱们跟踪变化和贡献。有关迁移复杂性的任何其余反馈将不胜感激!