Zadig + Liquibase:数据变更、业务变更、数据回滚,一键搞定
数据库开发运维作为研发流程上的刚需场景,目前在行业内还尚未形成标准或者主流方案。 Zadig 作为链接开发者的云原生持续交付平台,对该领域抱有持续的关注度。今天我们介绍的主角是开源数据库版本管理工具 Liquibase,本文将介绍 Liquibase 如何结合 Zadig,实现数据和业务同步变更,在充分验证后对数据做回滚的软件交付实践。
Liquibase 是什么?
Liquibase (https://www.liquibase.org/) 是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。支持丰富的格式(JSON、YAML、SQL、XML)来定义数据库更改,便于版本控制。支持多种运行方式,如命令行、Spring Boot 集成、Maven 插件、Gradle 插件等。它的目标是提供一种数据库类型无关的解决方案,通过执行 Schema 类型的文件进行变更,使用者无需维护多种数据库脚本及掌握多种数据库语言,对于大型项目友好,适合多团队协作开发。
研发流程中如何做数据变更?
下面以 Liquibase 中支持的 SQL 脚本为例,简单阐述研发过程中如何顺滑地执行数据变更和恢复。
- SQL 脚本存放在 Git 代码库中,建议和业务代码放一起管理,这样业务代码的变更和数据的变更可以完全匹配。
- 开发人员以 Pull Request 的方式提交业务代码和数据库变更 SQL 到 Git 代码库。
- 代码审核人员对开发提交的 Pull Request 内容进行审核,通过后合并。自动触发 Zadig 工作流的执行,包含任务:Liquibase 数据变更、服务构建、部署 dev 环境、测试、Liquibase 数据回滚。
- 测试人员触发 Zadig 工作流,包含任务:Liquibase 数据变更、服务构建、部署 qa 环境、测试、Liquibase 数据回滚。
- 运维人员触发 Zadig 工作流针对预发/生产环境进行数据变更和业务发布。
结合 Zadig 实践
准备工作
- 搭建项目 microservice-demo,参考教程 如何使用 GitLab + Zadig 实现产品级持续交付。
- 准备数据变更相关文件,文件保存在 microservice-demo 项目代码库中。
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
- 初始化 MySQL 数据库,创建不同环境使用的数据库 dev、qa、prod。
下面主要介绍研发流程中涉及的工作流
microservice-dev
、microservice-qa
、microservice-prod
的配置和使用。
第一步:配置工作流
包括:新建工作流 -> 配置数据变更任务 -> 配置构建任务 -> 配置部署任务。
新建工作流
点击 「新建工作流」-> 选择「自定义工作流」-> 输入工作流名称 microservice-dev
。
配置数据变更任务
- 添加阶段:点击 「+ 阶段」-> 填写阶段名称 数据变更 。
- 添加通用任务:点击「+ 任务」->选择「通用任务」。
- 配置通用任务,执行 liquibase update。具体操作为:新建 liquibase 软件包:从 Liquibase 官网下载安装包,添加到 Zadig 的软件包管理。具体添加方式参考:软件包管理 | Zadig 文档。
- 选择 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 官方文档。
配置构建任务
- 添加
构建
阶段 -> 点击「+ 任务」-> 选择「构建」。 - 配置任务名称
service-build
-> 选择镜像仓库 -> 选择服务组件及构建,点击「确定」。
配置部署任务
- 添加
部署
阶段 -> 点击「+ 任务」-> 选择 「部署」。 - 配置任务名称
deploy
-> 选择 dev 环境 -> 选择服务来源:其他任务输出,选择构建任务service-build
,点击「确定」。
工作流任务配置完成后,点击「保存」。至此已完成 microservice-dev
工作流任务的配置,其他工作流的具体配置类似,不再赘述。
配置自动化测试
- 添加
测试
阶段 -> 点击「+ 任务」-> 选择 「通用任务」。 - 添加任务
e2e-test
-> 完成e2e-test
任务的配置(请根据自己的实际情况来配置自动化测试)。
配置数据变更回滚任务
- 添加
数据回滚
阶段 -> 点击「+ 任务」-> 选择 「通用任务」。 - 添加任务
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 触发器
- 在工作流配置页面点击「触发器」。
- 点击「+ 添加」。
- 配置触发器。配置代码库信息、触发事件和工作流执行变量等。
第四步:SQL 变更触发工作流
- 变更 SQL 脚本,提交到代码库。
- 自动触发工作流执行。
更多 Zadig 的使用姿势可参考 官网文档。
扩展阅读
关于数据库/SQL 版本管理工具的更多介绍可参考以下内容。
Zadig,让工程师更专注创造。欢迎加入 开源吐槽群🔥

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
上游优先的故事
作者:tison,Apache Member & 孵化器导师,StreamNative Community Manager 微信公众号:“夜天之书”,关注开源共同体的发展,致力于回答 “如何建设一个开源社群” 的问题。 原文链接:https://mp.weixin.qq.com/s/GL2_wMxdYBpM399RmNJQKg 开源软件的用户在使用过程中遇到问题时,几乎总是先在自己的环境上打补丁绕过或快速修复问题。开源协同的语境下,开源软件以及维护开源软件的社群统称为该软件的上游,用户依赖上游软件的应用或基于上游软件复刻(fork)的版本统称为下游。上游优先(Upstream First),指的就是用户将下游发现的问题、做出的修改反馈到上游社群的策略。 网络上已经有不少文章讨论上游优先的定义、意义和通用的做法。例如,小马哥为极狐 GitLab 撰写了《Upstream First: 参与贡献开源项目的正确方式》。不过,这些文章往往是站在社群、平台或布道师的层面做笼统的介绍。本文希望从一个开发者的角度出发,由几个具体的上游优先的故事,讨论开发者角度实践上游优先策略的动机和方法。 ...
- 下一篇
StoneDB读写分离实践方案
在 StoneDB 1.0 版本中,InnoDB 引擎处理 OLTP 的事务型业务,Tianmu 引擎处理 OLAP 的分析型业务。因此,需要在主从复制环境的基础上做读写分离,所有的写操作和部分读操作走 InnoDB 引擎,所有的分析类查询走 Tianmu 引擎。读写分离方案既可以使用第三方中间件,也可以在业务前端实现。本文介绍的是较为常用的中间件 ProxySQL。 服务器配置说明 IP Memory CPU OS version 192.168.30.40 8G 8C CentOS Linux release 7.9 192.168.30.41 8G 8C CentOS Linux release 7.9 192.168.30.42 8G 8C CentOS Linux release 7.9 192.168.30.46 16G 16C CentOS Linux release 7.9 注:主从环境中的各个服务器的配置一般情况下建议是一致的,但由于 StoneDB 不管重放 binlog,还是用于 OLAP 场景的查询,都是较消耗系统资源的,建议 StoneDB 配置略高于 MyS...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19