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

Zadig + Liquibase,数据变更、业务变更、数据回滚,一键搞定

k8s技术圈 2022-10-07
515

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


今天我们介绍的主角是开源数据库版本管理工具 Liquibase,本文将介绍 Liquibase 如何结合 Zadig,实现数据和业务同步变更,在充分验证后对数据做回滚的软件交付实践。enjoy~


Liquibase 是什么?

Liquibase (https://www.liquibase.org/) 是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。支持丰富的格式(JSON、YAML、SQL、XML)来定义数据库更改,便于版本控制。支持多种运行方式,如命令行、Spring Boot 集成、Maven 插件、Gradle 插件等。它的目标是提供一种数据库类型无关的解决方案,通过执行 Schema 类型的文件进行变更,使用者无需维护多种数据库脚本及掌握多种数据库语言,对于大型项目友好,适合多团队协作开发。

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

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

  1. SQL 脚本存放在 Git 代码库中,建议和业务代码放一起管理,这样业务代码的变更和数据的变更可以完全匹配。

  1. 开发人员以 Pull Request 的方式提交业务代码和数据库变更 SQL 到 Git 代码库。

  1. 代码审核人员对开发提交的 Pull Request 内容进行审核,通过后合并。自动触发 Zadig 工作流的执行,包含任务:Liquibase 数据变更、服务构建、部署 dev 环境、测试、Liquibase 数据回滚。

  2. 测试人员触发 Zadig 工作流,包含任务:Liquibase 数据变更、服务构建、部署 qa 环境、测试、Liquibase 数据回滚。

  3. 运维人员触发 Zadig 工作流针对预发/生产环境进行数据变更和业务发布。


    结合 Zadig 实践

    准备工作

    1. 搭建项目 microservice-demo,参考教程 如何使用 GitLab + Zadig 实现产品级持续交付[1]
    2. 准备数据变更相关文件,文件保存在 microservice-demo 项目代码库[2] 中。
    microservice-demo
    ├── database-change
    │   ├── liquibase-conf
    │   │   ├── dev
    │   │   │   ├── example-changelog.sql # dev 环境待执行的变更集
    │   │   │   └── liquibase.properties  # dev 环境 Liquibase 配置文件
    │   │   ├── prod
    │   │   │   ├── example-changelog.sql # prod 环境待执行的变更集
    │   │   │   └── liquibase.properties  # prod 环境 Liquibase 配置文件
    │   │   └── qa
    │   │       ├── example-changelog.sql # qa 环境待执行的变更集
    │   │       └── liquibase.properties  # qa 环境 Liquibase 配置文件


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

    changeLogFile=example-changelog.sql
    liquibase.command.url=jdbc:mariadb://10.10.10.10:3306/prod
    liquibase.command.driver=org.mariadb.jdbc.Driver
    liquibase.command.classpath=$HOME/liquibase/bin/internal/lib/mariadb-java-client.jar
    liquibase.command.username: root
    liquibase.command.password: root

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

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

    第一步:配置工作流

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

    新建工作流

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

    配置数据变更任务

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

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

    3. 配置通用任务执行 liquibase update。

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

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

    具体脚本参考如下:

    #!/bin/bash
    set -ex
    export JAVA_HOME=$HOME/jdk
    cd zadig/examples/microservice-demo/database-change/liquibase-conf/dev
    liquibase update



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

    配置构建任务

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

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

    配置部署任务

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

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


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

    配置自动化测试

    1. 添加测试阶段 -> 点击「+任务」-> 选择「通用任务」。

    2. 添加任务 e2e-test -> 完成 e2e-test 任务的配置(请根据自己的实际情况来配置自动化测试)。

    配置数据变更回滚任务

    1. 添加数据回滚阶段 -> 点击「+任务」-> 选择「通用任务」。

    2. 添加任务 sql-rollback-liquibase -> 选择 java 软件包、liquibase 软件包、配置代码库信息和 shell 脚本执行。

    具体脚本参考如下:

    #!/bin/bash
    set -ex
    export JAVA_HOME=$HOME/jdk
    cd zadig/examples/microservice-demo/database-change/liquibase-conf/dev
    liquibase rollbackCount 3

    第二步:执行工作流

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

    系统会顺序执行 数据变更 -> 构建 -> 部署 -> 测试 -> 数据回滚。点击 sql-change-liquibase 查看 Liquibase 数据变更执行过程的详细日志

    sql-change-liquibase 任务执行完毕后查询数据库中信息如下。

    点击 sql-rollback-liquibase 任务查看 Liquibase 数据回滚的详细过程。任务执行完成后再次查看数据库中数据如下,可发现在此次流程中创建的数据表均已被清理

    第三步:配置 Git 触发器

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

    2. 点击「+添加」。

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

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

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

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


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

    扩展阅读

    关于数据库/SQL 版本管理工具的更多介绍可参考以下内容。


    参考链接:

    [1]

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

    [2]

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

    [3]

    https://www.liquibase.org/download

    [4]

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

    [5]

    https://docs.liquibase.com/home.html

    [6]

    https://docs.koderover.com/

     点击上方卡片关注K8s技术圈,掌握前沿云原生技术
    文章转载自k8s技术圈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论