Rainbond-Java源碼構建自定義JDK版本

  • 2019 年 10 月 7 日
  • 筆記

默認提供的JDK

Rainbond官方提供了多個版本的OpenJDK供用戶使用。這些OpenJDK的安裝包託管於好雨科技官方的OSS(對象存儲)中。能夠接入互聯網的Rainbond平台,可以通過rbd-repo組件的代理獲取這些資源,而不用人工干預。

用戶通過WEB介面配置,或在源碼根目錄創建 system.properties,設定 java.runtime.version來指定OpenJDK版本。

WEB介面設置的值優先順序高於 system.properties中設定的值。

  • WEB介面指定:
  • system.properties指定方式:
# system.properties 目前Rainbond能識別的版本值為11,10,1.9,1.8,1.7,1.6  java.runtime.version=1.8

在不做出其他任何調整的情況下,在Rainbond執行源碼構建時,會獲取以下版本的OpenJDK資源:

OpenJDK版本

資源地址

1.8(默認)

http://lang.goodrain.me/jdk/cedar-14/openjdk1.8.0_201.tar.gz

1.6

http://lang.goodrain.me/jdk/openjdk1.6.0_27.tar.gz

1.7

http://lang.goodrain.me/jdk/cedar-14/openjdk1.7.0_201.tar.gz

1.9

http://lang.goodrain.me/jdk/cedar-14/openjdk9.0.4.tar.gz

10

http://lang.goodrain.me/jdk/cedar-14/openjdk10.0.2.tar.gz

11

http://lang.goodrain.me/jdk/cedar-14/openjdk11.0.2.tar.gz

特別提醒:如果maven編譯過程中發生錯誤,請自行下載對應的JDK到自己的環境中,嘗試本地構建,來確認是否由於OpenJDK版本問題導致了編譯失敗。

自定義JDK

多數用戶希望能夠自定義JDK,比如希望使用特定版本的OpenJDK,或者具備Oracle的授權使用OracleJDK。接下來就會講解如何自定義。

Rainbond平台集成了 Jforg出品的 Artifactory 作為製品庫(即rbd-repo組件)。在這裡我們可以上傳並存儲自己的資源,包括jdk包。

  • 首先,訪問 http://<管理節點IP>:8081 登錄 Artifactory,默認憑證:admin/password
  • 創建自定義的本地製品倉庫,並上傳自定義的jdk包。

點擊查看長動圖

需要注意的是,Artifactory 上傳文件的默認限制是不能超過 100MB。如果上傳的文件超過了這個限制,可以在 Admin > General Configuration 頁面中設置 File Upload Max Size 項為一個合適的值。

  • 在平台WEB介面指定自定義JDK地址,設置處為應用構建源。

像上述方式上傳的jdk包,其地址為:http://<管理節點IP>:8081/artifactory/<自定義倉庫名>/<文件名> 類似:http://192.168.1.1:8081/artifactory/jdk2/jdk-8u201-linux-x64.tar.gz

至此,自定義JDK就完成了。

替換默認JDK

自定義JDK自由度更高,能適應更多的使用場景。但是其短板在於JDK獲取地址在每一個新建的應用中都要設置一遍。有沒有方式,可以替換Rainbond默認提供的JDK包呢?如果可以實現這個功能,那麼每次構建都不用做其他設置,使用默認路徑,即可安裝公司內部指定版本的JDK,豈不是很方便?

默認JDK的地址,實際上指向了Rainbond官方的對象存儲,這對於Artifactory而言,屬於一種遠程倉庫(remote repository)。在Artifactory中,是沒有辦法通過上傳文件,來替換遠程倉庫中的文件的。所以,我們要在本地建立另一個倉庫,來替換Rainbond官方提供的遠程倉庫。

接下來是詳細的步驟:

  • 用Rainbond官方提供的 rbd-java-buildpack 鏡像作為基礎,結合自需JDK包製作鏡像(以默認的1.8版本為例)
#構建目錄的文件結構如下:  .  ├── Dockerfile  └── jdk-8u201-linux-x64.tar.gz #這裡使用OracleJDK1.8 為例替換,用戶根據自己需求自行更改

Dockerfile內容:

FROM rainbond/buildpack:java-v5.1.5  COPY jdk-8u201-linux-x64.tar.gz /pkg/lang/jdk/cedar-14/openjdk1.8.0_201.tar.gz

構建操作:

docker build -t goodrain.me/buildpack:java-v5.1.5 .
  • 啟動服務

在管理節點編輯指定配置文件:

#vi /opt/rainbond/conf/base.yaml  #在末尾追加  - name: rbd-java-buildpack    endpoints:    - name: BUILDPACK_ENDPOINTS      protocol:      port: 2017    health:      name: rbd-java-buildpack      model: http      address: 127.0.0.1:2017/lang/      max_errors_num: 3      time_interval: 30    after:      - docker    type: simple    pre_start: docker rm rbd-java-buildpack    start: >-      docker run --name rbd-java-buildpack      --network host      -i goodrain.me/buildpack:java-v5.1.5    stop: docker stop rbd-java-buildpack    restart_policy: always

啟動服務:

node service update
  • 修改Artifactory中的遠程倉庫 pkg_lang 的遠程地址為 http://<管理節點IP>:2017/lang

如果已經用Rainbond官方遠程倉庫獲取過JDK包,那麼要在 pkg_lang-cache中清除已快取的記錄。

至此,就已經將默認的OpenJDK1.8版本,替換成為指定的 OracleJDK1.8版本了。

總結

基於這篇文章,用戶已經可以靈活掌握配置使用各種JDK的方式了。

在這篇文章之後,我們會繼續發布如何靈活配置Maven環境的文章,敬請期待。