Rainbond-離線環境下的JAVA源碼構建
- 2019 年 10 月 7 日
- 筆記
為什麼要寫這篇文檔?
在交付了很多企業級用戶後,我們發現很多用戶的環境都是離線的。我們一直在探索離線環境下實現源碼構建的方案,以期讓這些企業用戶可以也可以體驗到Rainbond源碼構建功能帶來的便捷。
那麼,在離線環境下,實現源碼構建會有哪些難點呢?其實這個問題的答案就是整套源碼構建流程中有哪些點對於互聯網有依賴:
- 程式碼倉庫:源碼構建過程的起點是一個可用的程式碼倉庫,離線環境下我們不可以使用 Github、Gitee 等基於互聯網的程式碼倉庫。Gitlab、Gogs 等私有程式碼倉庫成為了最佳選擇。有些用戶已經擁有了自己的私有程式碼倉庫,這種情況下,保證Rainbond管理節點所在的伺服器可以正常訪問到該程式碼倉庫即可;而對於還沒有搭建自己的私有程式碼倉庫的用戶而言,如何快速搭建一個Gitlab或者Gogs就是離線源碼構建需要攻克的第一關。
- 構建私服:構建私服是指在源碼構建過程中,獲取依賴包的倉庫,常見的有 Nexus、Artifactory 等。有些用戶已經擁有了自己的私有構建私服用以管理自己的依賴包,這種情況下,我們提供方案讓 Rainbond 可以直接對接私服;而對於還沒有搭建自己的構建私服的用戶而言,Rainbond自帶的 rbd-repo 組件可以作為本地倉庫使用。
- 應用運行時:應用運行時是指服務運行所依賴的環境,比如對於Java應用而言,運行時就是環境中安裝的 Jdk。對於用戶而言,離線環境如何配置好應用運行時是離線源碼構建最大的挑戰。
在明確了上述難點後,接下來的文章,會以Java應用構建為例,指引用戶一步步攻克這些難關,最終達成離線源碼構建的目標。
離線部署程式碼倉庫
在離線環境下,推薦使用平台的應用離線導入功能,快速導入 Gitlab 應用並安裝使用。
- 訪問Rainbond應用管理平台,並導入離線應用包
Gogs離線導入方式和Gitlab一致。
至此,我們已經擁有了一個私有化的程式碼倉庫。可以通過它來託管程式碼,並可以通過它實現自動構建。
離線對接/部署構建私服
Java源碼基於Maven構建過程中,會根據 pom.xml 文件解析依賴關係,並前往指定的構建私服拉取依賴包。而在Rainbond中,安裝了默認的源碼構建包倉庫 rbd-repo ,這個組件既可以作為已有私服的代理,也可以用來搭建本地私服,來應對不同用戶的需求。
- 已有私服的對接
離線配置應用運行時
本節提供一個在應用中離線安裝運行時(Jdk)的方案,這個方案會運行起一個私服倉庫服務,這個私服倉庫可以負責安裝java運行所需要的Jdk環境。
- 有網環境下載離線資源鏡像
docker pull rainbond/buildpack:java-v5.1.5 docker save rainbond/buildpack:java-v5.1.5 > rainbond-buildpack-java-v5.1.5.tgz
- 導入鏡像
將保存下來的鏡像壓縮文件放到首個管理節點上,然後導入鏡像:
docker load -i rainbond-buildpack-java-v5.1.5.tgz docker tag rainbond/buildpack:java-v5.1.5 goodrain.me/buildpack:java-v5.1.5 docker push 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
驗證服務是否運行
grctl cluster

- 對接rbd-repo並修改遠程倉庫
所有節點rbd-repo都需要調整
修改遠程倉庫 pkg_lang 對應URL為 http://<首個管理節點IP>:2017/lang/

至此,離線環境下的Java源碼構建環境就配置完成了。