Zadig + Mysql 代码、数据变更一站式编排,可靠丝滑交付

作为一款开源的关系型数据库管理系统,MySQL 因其体积小灵活性强、运行速度快、成本低而被企业和社区广泛使用。然而在业务迭代中,随着数据的积累和业务场景的复杂化,涉及到数据变更的操作往往会带来额外的心智负担。本文将分析这些痛点,并结合 Zadig 的工作流阐述解决问题的实践,enjoy~

# 数据变更的痛点

日常研发流程中,涉及到数据变更的场景和痛点包括但不限于:

  1. 开发工程师在 dev 环境进行开发和自测,某次变更既涉及到数据变更(比如引入新的字段),又有业务代码变更,此时只能先登录到数据库中手动执行变更脚本后,再将代码变更部署到 dev 环境中。
  2. 业务数据存放于 MySQL 数据库中(比如账号登录信息、用户下单信息),测试(开发)工程师日常在 qa 环境验收时创建了很多临时测试数据,每次测试完毕都需要手动清理这部分脏数据,将数据恢复至初始状态。
  3. ...

下面以 Zadig 官方提供的 MySQL 数据库变更任务为例,就上述场景分别说明如何在 Zadig 中实现 MySQL 代码、数据的一站式变更,将重复的事情自动化。

# 准备工作

  1. 搭建项目 microservice-demo,参考教程: 如何使用 GitLab + Zadig 实现产品级持续交付 (opens new window)
  2. 在 Zadig 上配置数据库,参考文档:数据库 (opens new window)

# 实践一:数据、代码一站式变更

# 第一步:配置工作流

包括:新建工作流 -> 配置数据变更任务 -> 配置构建任务 -> 配置部署任务。

  1. 新建工作流:点击新建工作流 -> 选择 SQL 数据及业务变更 模板 -> 输入工作流名称 workflow-dev

  1. 配置数据变更任务,选择对应需要变更的数据库。

  1. 配置构建任务。添加需要更新的服务组件,选择对应的构建。

  1. 配置部署任务,选择需要更新的环境名称。

至此所有任务配置完毕,点击保存完成工作流 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 参考实践一,此处不再赘述,下面详细介绍自动化测试和数据清理任务的配置。

  1. 配置自动化测试任务:添加阶段自动化测试 -> 添加并配置测试 任务。

自动化任务配置请根据自己的实际情况配置,本例中自动化测试用于测试商品创建和修改,运行完毕后会导致系统中遗留状态错误的商品数据。

  1. 配置数据清理任务:添加阶段数据清理 -> 添加并配置 SQL 数据库变更 -> 填写任务配置。本例中配置说明如下:
  • 任务名称:handle-dirty-data
  • 数据库:选择需要做数据清理的数据库
  • SQL 语句:填写默认的数据清理 SQL 语句
use order_info;
delete from product where status = 0;

至此,工作流配置完毕。

# 第二步:执行工作流

点击执行 -> 选择要更新的服务组件及代码信息 -> 选择 qa 环境 -> 启动任务。

系统会按照顺序依次执行以下阶段:构建 -> 部署 -> 自动化测试 -> 数据清理。

待自动化测试执行完毕后,查看数据库中数据如下:

待数据清理执行完毕后,查看数据库中数据如下,可以看到因自动化测试产生的错误状态数据已被自动清理。

# 第三步(进阶):配置 Git 触发器,自动清理

  1. 配置触发器:编辑工作流 workflow-qa -> 点击触发器 -> 配置代码库信息、触发事件和工作流执行变量等。

  1. 修改代码并提交到代码库后,会触发工作流执行,自动完成 构建 -> 部署 -> 自动化测试 -> 数据清理 流程,既保障本次变更的质量,又确保下次的自动化测试执行无后顾之忧。

# 探索更多实践

本文主要讲解了如何在 Zadig 上实现 MySQL 数据以及代码的一站式变更实践。如果官方提供的 MySQL 数据变更任务不能满足日常需求,可以参考 自定义任务 | Zadig 文档 (opens new window)编写符合自己情况的自定义任务。

Background Image

作为一名软件工程师,我们一直给各行各业写软件提升效率,但是软件工程本身却是非常低效,为什么市面上没有一个工具可以让研发团队不这么累,还能更好、更快地满足大客户的交付需求?我们是否能够打造一个面向开发者的交付平台呢?我们开源打造 Zadig 正是去满足这个愿望。

—— Zadig 创始人 Landy