用過 GitLab 的同學肯定也對 GitLab CI/CD 不陌生,GitLab CI/CD 是一個內建在 GitLab 中的工具,它可以幫助我們在每次程式碼推播時執行一系列指令碼來構建、測試和驗證程式碼的更改以及部署。
Rainbond 本身預設整合了 CI/CD 的整套流程,使用者只需提供原始碼,後續構建、執行完全交給 Rainbond 處理,整個過程是由 Rainbond 定義的,無需使用者干預。這樣有利也有弊,利就是簡化使用者的操作和無需學習 CI/CD 相關知識;弊是使用者無法在 CI/CD 過程中自定義,比如想整合程式碼檢測或執行個指令碼,這在 Rainbond 的原始碼構建流程中是不可自定義的。
本文給大家講述如何使用 GitLab CI/CD 構建、測試、部署 Spring Boot 應用,將產物執行在 Rainbond 上。
使用 GitLab CI 需要在倉庫根目錄下建立 .gitlab-ci.yml
檔案。在這個檔案中,你可以定義需要執行的編譯、測試、部署指令碼。
在新增了 .gitlab-ci.yml
檔案後,當推播程式碼時,GitLab Runner 自動執行你定義的 Pipeline,並在 GitLab CI 頁面上展示 CI 過程以及結果。
GitLab CI 的基本流程如下:
通過開源應用商店一鍵部署 GitLab 和 Runner ,新增 -> 基於應用商店建立元件 -> 在開源應用商店中搜尋 GitLab
依次安裝 GitLab 和 Runner 到指定應用中。
在 Rainbond v5.8 版本之前,Rainbond 對 Runner 型別的元件支援的並不是很好。因為 Runner 若以容器的形式去執行的話,本身它需要去掛載宿主機的docker.sock 檔案,使它可以排程宿主機的 docker 環境,建立容器執行任務。在 Rainbond v5.8 版本中,支援修改元件的 YAML,就可以自定義 Volumes 並掛載原生的 docker.sock。
在通過應用商店安裝了 Runner 之後,可以在 Runner 元件內 -> 其他設定中看到 Kubernetes 屬性,Rainbond 的應用模型已相容了 Kubernetes 屬性。
註冊 Runner 到 GitLab :
進入編排模式,將 runner 連線到 GitLab 並更新 runner 元件。(如提示 GitLab 未開啟對內埠,則選擇 80 埠)
首先存取 GitLab,Menu -> Admin -> Overview -> Runners -> Register an instance runner -> 複製 Registration token。
進入 runner 元件內,點選右上角 web 終端進入,執行以下命令進行註冊,<token>
換成上一步複製的 Registration token。
gitlab-runner register \
--non-interactive \
--executor "docker" \
--docker-image alpine:latest \
--url "http://127.0.0.1" \
--registration-token "NxNuoRXuzYy3GnFbkhtK" \
--description "docker-runner" \
--tag-list "newdocker" \
--run-untagged="true" \
--locked="false" \
--docker-volumes /var/run/docker.sock:/var/run/docker.sock \
--docker-privileged="true" \
--access-level="not_protected"
引數說明
Parameter | Value | Describe |
---|---|---|
--executor | docker | 執行器型別為docker。 |
--url | http://127.0.0.1 | GitLab addr |
--registration-token | GitLab token | |
--tag-list | newdocker | 定義runner的標籤/名字 |
--locked | false | runner為啟用狀態 |
--run-untagged | true | 執行沒有指定標籤的Job |
--docker-volumes | file_path | 掛載檔案到runner中 |
--docker-privileged | true | runner執行模式:特權模式 |
整個流程可以分為:
.gitlab-ci.yml
定義的 stages。前提:
1.在Rainbond上有已經基於映象部署好的元件
2.將範例程式碼匯入到 GitLab中。
3.編寫 .gitlab-ci.yml 檔案:
在專案根目錄下建立 .gitlab-ci.yml
內容如下:
# 定義 job 的執行順序
stages:
- test
- package
- push
# 定義基礎映象
image: maven:3.6.3-jdk-8
job-test:
stage: test
tags:
- newdocker
script:
- echo "===============開始執行程式碼測試任務==============="
- mvn test
job-package:
stage: package
tags:
- newdocker
script:
- echo "===============開始執行打包任務==============="
- ls
- mvn clean package
- cp Dockerfile target/Dockerfile
cache:
key: devops
paths:
- target/
job-push:
stage: push
image: docker:dind
cache:
key: devops
paths:
- target/
tags:
- newdocker
script:
- docker login -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD}
- docker build -t ${IMAGE_DOMAIN}/java-maven:latest .
- docker push ${IMAGE_DOMAIN}/java-maven:latest
after_script:
- curl -d '{"secret_key":"${RAINBOND_SECRET}"}' -H "Content-type:application/json" -X POST http://${RAINBOND_IP}:7070/console/custom/deploy/3321861bcadf0789af71898f23e8e740
after_script
是在推播映象完成後執行,通過 Rainbond API 構建元件,Rainbond 會獲取最新映象構建執行。<RAINBOND_SECRET> 可在元件 -> 構建源 -> 自動構建中看到。詳情可參閱檔案 設定元件自動構建部署
4.提交程式碼測試自動構建,
修改程式碼並提交,提交後可在專案的 CI/CD -> Jobs 可以看到正在執行的以及執行完成的任務詳情。
5.檢視 Rainbond 元件構建
可以在元件的操作記錄中看到自動構建資訊。
GitLab CI 擴充套件性很好,可以整合很多第三方工具,結合 Rainbond 作為 CD,將產物執行到 Rainbond 上,即可形成適用於自身程式碼專案的 Pipeline。
Rainbond 會在未來的 v5.9.x 版本中實現 Pipeline,對 Rainbond 實現 Pipeline 有想法的同學可以在 issue 上提出 Proposal https://github.com/goodrain/rainbond/issues