使用流水線外掛實現持續整合、持續部署

2023-03-21 18:02:20

流水線外掛 是基於 Rainbond 外掛體系 擴充套件實現,通過外掛化的方式,可以實現對 Rainbond 構建體系的擴充套件。該外掛由社群合作伙伴 拓維資訊 參與開發並貢獻,底層是基於 GitLab CI/CD 實現。

流水線構建與 Rainbond 原始碼構建的區別是:

  • Rainbond 原始碼構建:使用簡單,固定的構建模式,使用者只需提供原始碼,但不是很靈活。
  • 流水線構建:自定義構建步驟,使用更加靈活。

本文將介紹使用流水線外掛部署 RuoYi SpringBoot 專案,並實現提交程式碼後自動構建、自動部署。

安裝 GitLab 和 Runner

流水線外掛是基於 GitLab 實現,所以需要依賴 GitLab 和 GitLab Runner,如果已有則可跳過此步。

通過 Rainbond 開源應用商店部署 GitLab 和 Runner,進入到 平臺管理 -> 應用市場 -> 開源應用商店 中分別搜尋 GitLabGitLab-runner,選擇版本進行安裝,分別安裝到同一個應用內。

部署完成後,存取 GitLab 預設的域名進行使用者註冊。然後關閉 GitLab 預設的 AutoDevOps:Admin -> Settings -> CI/CD -> Continuous Integration and Deployment 取消勾選 Default to Auto DevOps pipeline for all projects

註冊 Runner

GitLab 和 Runner 都部署完成後,需要將 Runner 註冊到 GitLab 中。

進組 Runner 元件內 -> Web 終端,執行以下命令進行註冊:

  • <URL> 為 GitLab 存取地址
  • <TOKEN> 在 GitLab 的 Admin -> Runners 獲取 Registration token
  • <TAG> 自定義 Runner 的標籤。
gitlab-runner register \
  --non-interactive \
  --executor "docker" \
  --docker-image alpine:latest \
  --url "<URL>" \
  --registration-token "<TOKEN>" \
  --description "docker-runner" \
  --tag-list "<TAG>" \
  --run-untagged="true" \
  --locked="false" \
  --docker-volumes /var/run/docker.sock:/var/run/docker.sock \
  --docker-volumes /root/.m2/repository \
  --docker-privileged="true" \
  --access-level="not_protected" \
  --docker-pull-policy="if-not-present"

註冊完成後,可以在Admin -> Runners 頁面中看到如下圖,Statusonline 則正常。

安裝流水線外掛

通過 Rainbond 開源應用商店部署 Pipeline 應用外掛,進入到 平臺管理 -> 應用市場 -> 開源應用商店 中搜尋 Pipeline,選擇對應的版本進行部署。

安裝完成後,需要修改 Pipeline-Backend 服務的設定,進入到 Pipeline 應用內 -> Pipeline-Backend元件內,修改以下環境變數:

  • RAINBOND_URL:Rainbond 控制檯存取地址,例如:http://192.168.3.33:7070
  • RAINBOND_TOKEN:Rainbond 控制檯的 Token,可以在 右上角使用者 -> 個人中心 -> 存取令牌 中獲取。

修改完成後,更新或重啟 Backend 元件生效。

進入到 Pipeline 應用內 -> k8s 資源 -> 編輯 rainbond-pipeline,修改 pipeline 資源中的 access_urls 設定,修改為 Pipeline-UI 元件的對外存取地址,如下:

apiVersion: rainbond.io/v1alpha1
kind: RBDPlugin
metadata:
  labels:
    plugin.rainbond.io/name: pipeline
  name: pipeline
spec:
  access_urls:
  - https://custom.com
  alias: Pipeline
  author: Talkweb
  description: 該應用外掛是基於 GitLab CI/CD 實現,擴充套件 Rainbond 已有的構建體系。
  icon: https://static.goodrain.com/icon/pipeline.png
  version: 1.0.0

修改完成後,就可以在每個團隊檢視中看到 流水線 按鈕選項了。

部署 RuoYi 專案

將 Gitee 中的 RuoYi 專案 Fork 到私有的 GitLab 中。

修改專案組態檔中的 mysql 連線地址:

# ruoyi-admin/src/main/resources/application-druid.yml
......
spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.cj.jdbc.Driver
        druid:
            # 主庫資料來源
            master:
                url: jdbc:mysql://${MYSQL_HOST}:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                username: root
                password: root

部署 MySQL

通過 Rainbond 開源應用商店部署 MySQL 即可。部署之後開啟 MySQL 對外伺服器埠,通過本地工具連線到資料庫並建立 ry 資料庫和初始化 sql 目錄下的 quartz.sqlry_20230223.sql

部署 RuoYi SpringBoot

進入到 團隊檢視 -> 流水線

1.建立流水線

進入流水線管理,選擇 Java Maven 單模組的模版建立。

如果沒有 SonarQube 程式碼掃描步驟可以刪除,修改 編譯構建物 步驟:

  • 製品目錄:ruoyi-admin/target/*.jar

修改 構建映象 步驟:

  • 指令碼命令:

    cp ruoyi-admin/target/*.jar app.jar
    docker login -u ${REPOSITORY_USERNAME} -p ${REPOSITORY_PASSWORD} ${REPOSITORY_URL}
    docker build -t  ${REPOSITORY_URL}/${ORG}/${MODULE}:${DEVOPS_VERSION} .
    docker push ${REPOSITORY_URL}/${ORG}/${MODULE}:${DEVOPS_VERSION}
    

在流水線的變數內,指定 Docker 相關的環境變數用於打包映象和推播映象:

  • REPOSITORY_URL:映象倉庫地址,如:registry.cn-hangzhou.aliyuncs.com
  • ORG:映象倉庫組織,例如:goodrain
  • REPOSITORY_USERNAME:映象倉庫使用者名稱
  • REPOSITORY_PASSWORD:映象倉庫密碼

2.建立應用服務

  • 服務編碼:唯一的
  • 服務名稱:自定義
  • 流水線:選擇流水線模版
  • 倉庫設定:填寫倉庫地址,如:http://gitlab.test.com/root/ruoyi.git
  • 認證設定:可選使用者密碼或Token

建立應用服務後,可在 GitLab 倉庫內看到多了兩個檔案 Dockerfile.gitlab-ci.yml ,這是由流水線外掛服務自動生成並提交到倉庫內。

3.構建服務

進入 程式碼管理,應用服務選擇 ruoyi,點選 構建 按鈕開始構建。可以在持續整合頁面看到構建狀態以及步驟,點選步驟可跳轉至 GitLab 詳情頁。

4. 部署後端服務

等待構建完成後,即可在映象倉庫中看到構建的映象版本,接下來就可以通過該版本進行部署,可選擇部署到當前團隊下的哪個應用內。

部署完成後,可在部署歷史頁面看到部署歷史,點選部署詳情跳轉到 Rainbond 元件內。

編輯依賴關係

接下來進入到應用內,切換到編排模式將 ruoyi 服務依賴至 MySQL 服務,並更新 ruoyi 元件。

進入到 ruoyi 元件內 -> 埠,新增 80 埠並開啟對外服務,即可通過預設的域名存取到 ruoyi UI。

設定自動構建和自動部署

編輯已經建立的應用服務,開啟自動構建和自動部署按鈕,下次提交程式碼時將會自動觸發整個流程。

最後

通過流水線外掛可以更靈活的擴充套件構建過程,比如增加程式碼掃描、構建成功後的訊息通知等等。流水線外掛也會持續迭代,歡迎大家安裝使用!