在交付了不少企業級用戶後,咱們發現不少用戶的環境都是離線的。咱們一直在探索離線環境下實現源碼構建的方案,以期讓這些企業用戶能夠也能夠體驗到Rainbond源碼構建功能帶來的便捷。java
那麼,在離線環境下,實現源碼構建會有哪些難點呢?其實這個問題的答案就是整套源碼構建流程中有那些點對於互聯網有依賴:node
- 代碼倉庫:源碼構建過程的起點是一個可用的代碼倉庫,離線環境下咱們不可使用 Github、Gitee 等基於互聯網的代碼倉庫。Gitlab、Gogs 等私有代碼倉庫成爲了最佳選擇。有些用戶已經擁有了本身的私有代碼倉庫,這種狀況下,保證Rainbond管理節點所在的服務器能夠正常訪問到該代碼倉庫便可;而對於尚未搭建本身的私有代碼倉庫的用戶而言,如何快速搭建一個Gitlab或者Gogs就是離線源碼構建須要攻克的第一關。ios
- 構建私服:構建私服是指在源碼構建過程當中,獲取依賴包的倉庫,常見的有 Nexus、Artifactory 等。有些用戶已經擁有了本身的私有構建私服用以管理本身的依賴包,這種狀況下,咱們提供方案讓 Rainbond 能夠直接對接私服;而對於尚未搭建本身的構建私服的用戶而言,Rainbond自帶的 rbd-repo 組件能夠做爲本地倉庫使用。docker
- 應用運行時:應用運行時是指服務運行所依賴的環境,好比對於Java應用而言,運行時就是環境中安裝的 Jdk。對於用戶而言,離線環境如何配置好應用運行時是離線源碼構建最大的挑戰。bash
在明確了上述難點後,接下來的文章,會以Java應用構建爲例,指引用戶一步步攻克這些難關,最終達成離線源碼構建的目標。服務器
在離線環境下,推薦使用平臺的應用離線導入功能,快速導入 Gitlab 應用並安裝使用。app
須要事先獲取離線資源:Gitlab應用包 Gogs應用包maven
- 訪問Rainbond應用管理平臺,並導入離線應用包ui
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
<img src="https://static.goodrain.com/images/docs/5.0/advanced-scenarios/java-build-pack.png" style="border:1px solid #eee;width:100%">
全部節點rbd-repo都須要調整
修改遠程倉庫 pkg_lang
對應URL爲 http://<首個管理節點IP>:2017/lang/
至此,離線環境下的Java源碼構建環境就配置完成了。