暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Zadig + Flyway 工作流统一数据和代码变更,研发更丝滑

运维开发故事 2022-09-21
1022

数据库开发运维作为研发流程上的刚需场景,目前在行业内还尚未形成标准或者主流方案。Zadig 作为链接开发者的云原生持续交付平台,对该领域抱有持续的关注度。


今天我们介绍的主角是开源数据库版本管理工具 Flyway,本文将介绍 Flyway 如何结合 Zadig,实现数据和业务同步变更的软件交付实践。enjoy~


Flyway 是什么?

Flyway (https://flywaydb.org)是一款开源的数据库版本管理工具,Flyway 可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,无需复杂的配置,Migrations 可以写成 SQL 脚本,也可以写在 Java 代码中,不仅支持 Command Line 和 Java API,还支持 Build 构建工具和 Spring Boot 等,同时在分布式环境下能够安全可靠地升级数据库。


研发流程中如何做数据变更?

下面以 Flyway 中支持的 SQL 脚本为例,简单阐述研发过程中如何顺滑地执行数据变更。

  1. SQL 脚本存放在 Git 代码库中,建议和业务代码放一起管理,这样业务代码的变更和数据的变更可以完全匹配。
  2. 开发人员以 Pull Request 的方式提交业务代码和数据库变更 SQL 到 Git 代码库。
  3. 代码审核人员对开发提交的 Pull Request 内容进行审核,通过后合并。自动触发 Zadig 工作流的执行,包含任务:Flyway 数据变更、服务构建、部署 dev 环境、测试。
  4. 测试人员触发 Zadig 工作流,包含任务:Flyway 数据变更、服务构建、部署 qa 环境、测试。
  5. 运维人员触发 Zadig 工作流针对预发/生产环境进行数据变更和业务发布。


结合 Zadig 实践

准备工作

  1. 搭建项目 microservice-demo,参考教程 如何使用 GitLab + Zadig 实现产品级持续交付[1]
  2. 准备数据变更相关文件,文件保存在 microservice-demo 项目代码库[2] 中。
microservice-demo
├── database-change
│   ├── flyway-conf
│   │   ├── flyway-dev.conf # dev 环境 Flyway config 文件
│   │   ├── flyway-prod.conf # prod 环境 Flyway config 文件
│   │   └── flyway-qa.conf  # qa 环境 Flyway config 文件
│   └── sql # SQL 脚本
│       ├── V1__Create_person_table.sql
│       ├── V2__Add_people.sql
│       ├── V3__Create_student_table.sql
│       └── put-your-sql-migrations-here.txt

根据实际的情况修改 Flyway config 文件中数据库相关配置。

flyway.url=jdbc:mysql://10.10.10.10:3306/dev
flyway.user=root
flyway.password=root

  1. 初始化 MySQL 数据库,创建不同环境使用的数据库 dev、qa、prod。

对于新创建的数据库无需做额外的初始化操作,对于已有的数据库需要使用 flyway baseline 命令对数据库进行初始化。

下面主要介绍研发流程中涉及的工作流 dev-workflowqa-workflow 、prod-workflow 的配置和使用。

第一步:配置工作流

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

新建工作流

点击「新建工作流」-> 选择「自定义工作流」-> 输入工作流名称 dev-workflow


配置数据变更任务

  1. 添加阶段:点击「+ 阶段」-> 填写阶段名称 数据变更

  2. 添加通用任务:点击「+ 任务」->选择「通用任务」。

  3. 配置通用任务执行 flyway migration。

    1. 新建 flyway 软件包。从 Flyway 官网[3]下载安装包,添加到 Zadig 的软件包管理。具体添加方式参考:软件包管理 | Zadig 文档[4]

    2. 选择 flyway 软件包、配置代码库信息和 shell 脚本执行。

具体脚本参考如下:

#!/bin/bash
set -e
cd microservice-demo/database-change
#SQL 脚本存放路径
export FLYWAY_LOCATIONS=filesystem:/workspace/microservice-demo/database-change/sql 
#Flyway 配置文件,根据不同的环境使用不同的配置文件
export FLYWAY_CONFIG_FILES=/workspace/microservice-demo/database-change/flyway-conf/flyway-dev.conf 

flyway migrate


至此,Flyway 数据变更任务配置完成,更多 Flyway 的工作原理和 CLI 使用方式详见 Flyway 官方文档[5]

配置构建任务

  1. 添加构建阶段 -> 点击「+任务」-> 选择「构建」。

  2. 配置任务名称 service-build -> 选择镜像仓库 -> 选择服务组件及组件,点击「确定」。

配置部署任务

  1. 添加部署阶段 -> 点击「+任务」-> 选择「部署」。

  2. 配置任务名称 deploy -> 选择 dev 环境 -> 选择服务来源:其他任务输出,选择构建任务 service-build,点击「确定」。


工作流任务配置完成后点击「保存」。至此已完成 dev-workflow 工作流任务的配置,其他工作流的具体配置类似,不再赘述。

第二步:执行工作流

点击「执行」,确认执行变量,选择对应需要更新的服务组件和代码信息,点击「启动任务」。

在任务详情页面点击 sql-change-flyway 任务,查看 Flyway 数据变更执行过程的详细日志。

第三步:配置触发器

  1. 在工作流配置页面点击「触发器」。

  2. 点击「+添加」。

  3. 配置触发器。配置代码库信息、触发事件和工作流执行变量等。

第四步:SQL 变更触发工作流

  1. 添加 SQL 脚本,提交到代码库。

  2. 自动触发工作流执行。


更多 Zadig 的使用姿势可参考官网文档[6]


参考链接:

[1]

https://koderover.com/tutorials/codelabs/GitLab/index.html

[2]

https://github.com/koderover/zadig/tree/main/examples/microservice-demo

[3]

https://flywaydb.org/download

[4]

https://docs.koderover.com/zadig/v1.14.0/settings/app/

[5]

https://flywaydb.org/documentation/

[6]

https://docs.koderover.com/

Zadig,让工程师更专注创造。

欢迎加入 开源吐槽群🔥
文章转载自运维开发故事,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论