Bytebase上使用自建GitLab的配置SQL审核
一、前言
Bytebase 一个特色功能就是像管理代码一样,管理db数据库。Bytebase可以对接常用的Git仓库,用于保持db数据库的所有脚本变更。
- 对追踪一个项目所属数据库脚本变更非常方便。
- 同时项目的业务代码,db数据库代码,可以共同保持在一个仓库中,解决常规环境下业务代码,db脚本的版本不协调的问题
- Git中的代码,可以对接Bytebase本身自带的SQL审核功能,保证上线代码的正确性
由于我们线上环境使用的是私有化部署的GitLab仓库,所以这里就使用自建的GitLab进行相应操作
参考文档:https://www.bytebase.com/zh/docs/vcs-integration/self-host-gitlab
注:这里GitLab环境的部署省略
二、Bytebase的GitOps配置
1. 添加GitOps提供方
- 选择设置->集成->GitOps

点击添加Git提供方,进入下一步
- 选择自托管GitLab , 并输入提前准备GitLab的URL

点击下一步,继续
- 参考页面上的提示,去GitLab配置OAuth应用

在GitLab的顶部菜单中,选择管理员

选择应用->新建应用

填写的内容在上面的Bytebase页面中已经给出,一一对应复制即可

复制 应用ID 和 Secret,填写到上面Bytebase的GitOps配置页面中相应位置

点击继续,这时候会验证失败,原因是Bytebase的URL地址中带有5678端口,需要进行如下配置

重新点击上面GitOps配置,验证通过后,出现下图的确认信息

点击确认并添加,继续下一步

自托管GitLab添加成功
2. 配置项目的Workflow为GitOps流
- 打开测试项目,选择GitOps工作流

- 选择前面配置的自托管GitLab

- 选择项目在Gitlab上的仓库位置

- 出现详细的配置参数,可以根据实际情况调整,这里保持默认


点击完成后,项目的GitOps配置完成。下面就可以使用了
三、脚本Git提交测试
在进行项目的GitOps配置界面上,有下面这段描述

根据说明,在gitlab仓库上建立目录employee/bybase/test,用于存放Test环境下的db脚本(注意:环境名Test需要使用小写test)

test目录下,提交的db脚本,文件名如下所示:
- ddl脚本:
employee##202304251023##ddl##create_table_test1.sql - dml脚本:
employee##202304251035##dml##insert_table_test1.sql
1. DDL语句测试
- 在gitlab上提交ddl语句,建表脚本如下所示:

- 切换到Bytebase,可以看到自动从GitLab获取提交的脚本,生成了变更Schema的工单

- 点击工单,查看详情。可以看到自动进行检查了,SQL审核部分存在错误

- 调整SQL,已满足SQL审核要求

- SQL审核通过以后,可以点击发布,sql工单正式发布。由于这里Bytebase是项目所有者,工单发布后,不用经过审批流程,自动在对应环境库上执行

- 可以看到,SQL脚本在test环境上自动执行完成,点击查看变更,可以看到变更schema语句,以及schema版本变更前后的对比

- 登录test环境数据库,可以看到已经出现前面新建的表,表结构跟sql脚本基本一致(comment处存在乱码,应该是环境问题)

- 点击解决按钮,结束工单流程

- 这时候查看git上的脚本,发现并没有发生变化

因此,这里需要注意,Git管理SQL脚本时,SQL脚本的调整最好在git中完成,不要直接在Bytebase上调整脚本,否则无法同步到git上。
2. DML语句测试
- 在gitlab上提交dml语句,脚本如下所示:

- gitlab上提交dml脚本,切换到Bytebase上,可以看到自动出现了变更数据的工单

- 点开工单,可以发现insert语句审核没有通过,存在语法错误

- 修改dml语句,并gitlab上提交

- 切换到Bytebase上,查看工单,可以看到dml语句自动同步更改了,并且自动进行SQL审核

- 通过SQL审核后,点击发布按钮提交工单,工单自动在test环境上执行

- 到test环境库上查询,发现数据已经正确插入

- 点击解决,结束工单

四、疑惑
通过自建gitlab,Bytebase能够自动的将代码仓库跟sql审核两块整合起来,通过统一的代码仓库来管理sql脚本和代码,大大优化了企业开发上线的流程。
不过在使用中发现了一个疑惑:
- 开发人员(如:dev1)在git上提交脚本后

在其Bytebase中无法看到对应的工单。
- 用admin账号登录,可以看到对应的工单,可以看到创建人是Bytebase机器人组手,发布人是admin

- 这两个用户,都是属于项目所有者

- 而项目所有者,是否不需要走审批流,工单发布时,只要SQL审核通过,就自动执行了,没有走相应的审批流程:项目所有者->DBA审批





