Java 11 預覽支持已在 Jenkins 2.155+ 中可用 R

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 發送郵件告訴咱們你的體驗。這些信息將幫助咱們跟蹤變化和貢獻。有關遷移複雜性的任何其餘反饋將不勝感激!

相關文章
相關標籤/搜索