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,让工程师更专注创造!欢迎加入 开源吐槽群🔥