主机基础设施如何使用 Zadig 做持续交付

DevOps 创建于:2022-11-14

Zadig 提供了面向容器运行时环境、大规模微服务的云原生持续交付方案,被企业广泛采用,但在企业实际运用过程中,还存在部分服务无法接入的情况,对运维统一化管理造成不便。 常见的无法接入的情况:一部分服务暂时不便于迁移容器或不打算迁移虚拟机/主机部署;或基础设施本身是可网络互通的设备,比如 IoT 物联网场景下自动驾驶车辆主机端,工厂可连接设备等。

下面我们以 vm-microservice-demo 项目的后端服务 + 基础设施为主机场景为例,来阐述以上场景如何在 Zadig 中实现持续交付。下文会介绍两种常见的接入方式:

  • 方式一:目标部署主机和 Zadig 连通,直接将服务部署到目标主机
  • 方式二:通过堡垒机(一般也称为跳板机)和 Zadig 连通,在堡垒机上将服务部署到目标主机

项目基本配置

配置主机

系统管理员访问 系统设置 -> 主机管理 -> 新建,填写主机信息后保存即可。主机资源可以是目标部署主机或堡垒机。

创建项目和服务

以 vm-microservice-demo 项目为例,该项目包含 Vue.js 前端服务 frontend 和 Golang端服务 backend,共包括 devqa 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 连通,使用自动化运维工具快速实现部署相关操作。

部署架构

准备工作

  1. 在 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 触发器,当触发事件发生时会自动执行工作流部署服务:

更多最佳实践

  1. 对于更复杂的服务构建配置,可参考 构建镜像 | Zadig 文档 将依赖的工具放进自定义镜像中,缩短构建所需时间。
  2. 参考 构建缓存 | Zadig 文档 配置构建缓存,提高构建运行效率,加速服务更新。

Zadig,让工程师更专注创造!欢迎加入 开源吐槽群🔥

Zadig on Github
Zadig on Gitee

原文地址:https://my.oschina.net/koderover/blog/5560896

免责声明:本文来源于互联网,版权归合法拥有者所有,如有侵权请公众号联系管理员

* 本站提供的一些文章、资料是供学习研究之用,如用于商业用途,请购买正版。

Zadig云原生交付