主機基礎設施如何使用 Zadig 做持續交付
Zadig 提供了面向容器執行時環境、大規模微服務的雲原生持續交付方案,被企業廣泛採用,但在企業實際運用過程中,還存在部分服務無法接入的情況,對運維統一化管理造成不便。 常見的無法接入的情況:一部分服務暫時不便於遷移容器或不打算遷移虛擬機器/主機部署;或基礎設施本身是可網路互通的裝置,比如 IoT 物聯網場景下自動駕駛車輛主機端,工廠可連線裝置等。
下面我們以 vm-microservice-demo 專案的後端服務 + 基礎設施為主機場景為例,來闡述以上場景如何在 Zadig 中實現持續交付。下文會介紹兩種常見的接入方式:
- 方式一:目標部署主機和 Zadig 連通,直接將服務部署到目標主機
- 方式二:通過堡壘機(一般也稱為跳板機)和 Zadig 連通,在堡壘機上將服務部署到目標主機
專案基本配置
配置主機
系統管理員訪問 系統設定
-> 主機管理
-> 新建
,填寫主機資訊後儲存即可。主機資源可以是目標部署主機或堡壘機。
建立專案和服務
以 vm-microservice-demo 專案為例,該專案包含 Vue.js 前端服務 frontend
和 Golang端服務 backend
,共包括 dev
和 qa
2 個環境。案例原始碼位於:[koderover/zadig/microservice-demo],相關檔案說明如下:
zadig/examples/microservice-demo
├── backend # 後端服務原始碼
├── frontend # 前端服務原始碼
└── vm # 部署相關配置
├── ansible # 使用 ansible 工具部署的相關配置
│ ├── ansible.Dockerfile # 包含 ansible 工具的映象 Dockerfile
│ └── hosts-dev # 部署 dev 環境的主機資訊,埠 22 已開放,可使用 ansible 批量操作
│ └── hosts-qa # 部署 qa 環境的主機資訊,埠 22 已開放,可使用 ansible 批量操作
└── restart.sh # backend 服務部署指令碼
系統管理員新建主機專案 vm-microservice-demo
。 在專案初始化嚮導第二步中,點選+
按鈕新增服務,填寫服務名稱 backend
。 接下來為 backend
服務配置構建和部署以便後續使用工作流對其進行交付。對於不同的接入方式配置有所不同,下面分開介紹。
方式一:直接部署服務至目標主機
適用:目標主機和 Zadig 連通,使用自動化運維工具快速實現部署相關操作。
部署架構
準備工作
- 在 Zadig 中支援部署工具:以 ansible 為例,Dockerfile 位於案例原始碼的
vm/ansible/ansible.Dockerfile
檔案中,參考 構建映象 | Zadig 文件 新增自定義映象ansible:amd64
。
構建配置
構建配置說明:
- 作業系統:
ansible:amd64
- 依賴的軟體包:
go 1.12.9
- 程式碼資訊:案例原始碼庫 koderover/zadig
- 新增二進位制包儲存步驟,儲存路徑為
$WORKSPACE/backend/$PKG_FILE
- 通用構建指令碼:見如下程式碼段
#!/bin/bash
set -ex
if [ -e $WORKSPACE/backend ]; then
rm -rf $WORKSPACE/backend
fi
cp -r $WORKSPACE/zadig/examples/microservice-demo/backend $WORKSPACE/backend
cp -rf $WORKSPACE/zadig/examples/microservice-demo/vm/ansible $WORKSPACE/backend
cp $WORKSPACE/zadig/examples/microservice-demo/vm/restart.sh $WORKSPACE/backend/restart.sh
cd $WORKSPACE/backend
chmod +x restart.sh
make build-backend
tar cvf $PKG_FILE backend restart.sh
部署配置
選擇本地直連部署,部署指令碼如下:
#!/bin/bash
set -ex
cd $WORKSPACE/backend
ansible-playbook main.yaml --extra-vars PKG_FILE=$ARTIFACT -i hosts-${ENV_NAME} -v
方式二:通過堡壘機部署服務至目標主機
適用:對主機伺服器有更高的安全審計要求(比如主機在內網),在堡壘機上完成服務部署相關操作,堡壘機和 Zadig 連通。結合一些自動化運維工具將服務部署到目標主機上。
部署架構
構建配置
構建配置說明:
- 作業系統:
ubuntu 20.04
- 依賴的軟體包:
go 1.12.9
- 程式碼資訊:案例原始碼庫 koderover/zadig
- 新增二進位制包儲存步驟,儲存路徑為
$WORKSPACE/backend/$PKG_FILE
- 通用構建指令碼:見如下程式碼段
#!/bin/bash
set -ex
if [ -e $WORKSPACE/backend ]; then
rm -rf $WORKSPACE/backend
fi
cp -r $WORKSPACE/zadig/examples/microservice-demo/backend $WORKSPACE/backend
cp $WORKSPACE/zadig/examples/microservice-demo/vm/restart.sh $WORKSPACE/backend/restart.sh
cd $WORKSPACE/backend
chmod +x restart.sh
make build-backend
tar cvf $PKG_FILE backend
部署配置
使用 SSH Agent 遠端部署並選擇堡壘機,部署指令碼如下:
本例中用於 ansible 部署的相關配置檔案位於堡壘機 ~/ansible 目錄下,請根據實際情況調整。
#!/bin/bash
set -ex
# 將構建產物複製到堡壘機上
scp -P $kr_jumpbox_server_PORT -i $kr_jumpbox_server_PK $ARTIFACT $kr_jumpbox_server_USERNAME@$kr_jumpbox_server_IP:/home/ubuntu/microservice-demo/$ARTIFACT
# SSH 登入到堡壘機上,在堡壘機上做服務部署
if [ $ENV_NAME = "dev" ]; then
ssh -i $kr_jumpbox_server_PK $kr_jumpbox_server_USERNAME@$kr_jumpbox_server_IP 'cd ~/ansible; ansible-playbook main.yml -i hosts/evm/hosts-dev'
elif [ $ENV_NAME = "qa" ]; then
ssh -i $kr_jumpbox_server_PK $kr_jumpbox_server_USERNAME@$kr_jumpbox_server_IP 'cd ~/ansible; ansible-playbook main.yml -i hosts/evm/hosts-qa'
fi
工程師如何使用
- 配置完畢後,系統會自動建立 2 套環境和 3 條工作流,日常使用中,可以執行工作流部署服務:
- 編輯工作流,配置 Webhook 觸發器,當觸發事件發生時會自動執行工作流部署服務:
更多最佳實踐
- 對於更復雜的服務構建配置,可參考 構建映象 | Zadig 文件 將依賴的工具放進自定義映象中,縮短構建所需時間。
- 參考 構建快取 | Zadig 文件 配置構建快取,提高構建執行效率,加速服務更新。
Zadig,讓工程師更專注創造!歡迎加入 開源吐槽群🔥
- KodeRover/Zadig 攜手阿里雲端計算巢幫助企業構建數字化基建:做工程師背後的工程師!
- Don't Block Developer,Zadig v1.16.0 好用小功能集錦
- 終於等到你:Zadig v1.16.0 開發者福利版重磅釋出,用的爽是硬道理,細節拉滿
- 路特斯如何使用 Zadig 實現混合雲全球交付
- 國際化多版本環境如何用 Zadig Migrate 統一資料和程式碼變更
- Zadig 快速體驗,玩轉本地安裝!
- 為什麼說軟體工程能力是產業數字化的核心驅動力? | WISE2022 新經濟之王大會
- 釋出策略知多少?藍綠/紅黑/灰度/滾動...
- 自動駕駛團隊如何用 Zadig 為開發者提供更好體驗
- Zadig Liquibase:資料變更、業務變更、資料回滾,一鍵搞定
- 神奇的 Zadig 工作流:以連結廣大開發者為使命
- 資料庫/SQL 版本管理工具選型指北
- 如何實現 MySQL 程式碼和資料的一站式變更
- Zadig 跨團隊之最佳使用姿勢:搞定開發、測試、運維協作自動化
- 基於 Zadig 的 GitOps 實踐
- 極速 Zadig 構建效率是這樣煉成的
- 主機基礎設施如何使用 Zadig 做持續交付
- Zadig 環境負載均衡:0 人工干預,極速部署
- 打通了!Jira Zadig 實現需求與研發過程追蹤
- 雲原生 DevOps 現狀調研問卷徵集:KodeRover 聯合 OSCHINA 推出