# 数据变更的痛点
日常研发流程中,涉及到数据变更的场景和痛点包括但不限于:
- 开发工程师在 dev 环境进行开发和自测,某次变更既涉及到数据变更(比如引入新的字段),又有业务代码变更,此时只能先登录到数据库中手动执行变更脚本后,再将代码变更部署到 dev 环境中。
- 业务数据存放于 MySQL 数据库中(比如账号登录信息、用户下单信息),测试(开发)工程师日常在 qa 环境验收时创建了很多临时测试数据,每次测试完毕都需要手动清理这部分脏数据,将数据恢复至初始状态。
- ...
下面以 Zadig 官方提供的 MySQL 数据库变更任务为例,就上述场景分别说明如何在 Zadig 中实现 MySQL 代码、数据的一站式变更,将重复的事情自动化。
# 准备工作
- 搭建项目 microservice-demo,参考教程: 如何使用 GitLab + Zadig 实现产品级持续交付 (opens new window)。
- 在 Zadig 上配置数据库,参考文档:数据库 (opens new window)
# 实践一:数据、代码一站式变更
# 第一步:配置工作流
包括:新建工作流 -> 配置数据变更任务 -> 配置构建任务 -> 配置部署任务。
- 新建工作流:点击
新建工作流
-> 选择SQL 数据及业务变更
模板 -> 输入工作流名称workflow-dev
。
- 配置数据变更任务,选择对应需要变更的数据库。
- 配置构建任务。添加需要更新的服务组件,选择对应的构建。
- 配置部署任务,选择需要更新的环境名称。
至此所有任务配置完毕,点击保存
完成工作流 workflow-dev
的配置。
# 第二步:执行工作流
点击执行
-> 填写要执行的 SQL 语句-> 选择需要更新的服务组件及代码信息 -> 执行工作流。
本实践中 SQL 变更脚本如下(修改服务
hadas-core
的鉴权类型):
use service_config;
update services set auth_type = 2 where service_name = "hadas-core";
数据变更任务执行完毕前后分别查看 MySQL 数据效果如下(其中 1 为任务执行前,2 为执行后):
第一个数据变更任务执行完毕后,会自动执行后续的构建和部署任务,实现数据和业务的一站式变更。
# 实践二:脏数据一键自动清理
# 第一步:配置工作流
包括:新建工作流 -> 配置构建任务 -> 配置部署任务 -> 配置自动化测试任务 -> 配置数据清理任务。
其中新建工作流 workflow-qa
、配置构建任务 build-myapps
、部署任务 deploy-myapps
参考实践一,此处不再赘述,下面详细介绍自动化测试和数据清理任务的配置。
- 配置自动化测试任务:添加阶段
自动化测试
-> 添加并配置测试
任务。
自动化任务配置请根据自己的实际情况配置,本例中自动化测试用于测试商品创建和修改,运行完毕后会导致系统中遗留状态错误的商品数据。
- 配置数据清理任务:添加阶段
数据清理
-> 添加并配置SQL 数据库变更
-> 填写任务配置。本例中配置说明如下:
任务名称
:handle-dirty-data数据库
:选择需要做数据清理的数据库SQL 语句
:填写默认的数据清理 SQL 语句
use order_info;
delete from product where status = 0;
至此,工作流配置完毕。
# 第二步:执行工作流
点击执行
-> 选择要更新的服务组件及代码信息 -> 选择 qa 环境 -> 启动任务。
系统会按照顺序依次执行以下阶段:构建 -> 部署 -> 自动化测试 -> 数据清理。
待自动化测试执行完毕后,查看数据库中数据如下:
待数据清理执行完毕后,查看数据库中数据如下,可以看到因自动化测试产生的错误状态数据已被自动清理。
# 第三步(进阶):配置 Git 触发器,自动清理
- 配置触发器:编辑工作流
workflow-qa
-> 点击触发器
-> 配置代码库信息、触发事件和工作流执行变量等。
- 修改代码并提交到代码库后,会触发工作流执行,自动完成
构建 -> 部署 -> 自动化测试 -> 数据清理
流程,既保障本次变更的质量,又确保下次的自动化测试执行无后顾之忧。
# 探索更多实践
本文主要讲解了如何在 Zadig 上实现 MySQL 数据以及代码的一站式变更实践。如果官方提供的 MySQL 数据变更任务不能满足日常需求,可以参考 自定义任务 | Zadig 文档 (opens new window)编写符合自己情况的自定义任务。