各位有没有使用 CICD 上面来管理不同环境数据库的经验呀?
目前在使用 GitLab CI 做了自动构建部署流水线,应用服务使用的 helm 来管理,数据库管理的话,前段时间用了一个开源的产品,但是其开源版本没法限制普通开发者接触生产数据库,所以还是想着自己拿小工具配合搭出一套流程来。
目前主要的想法是:
新建一个独立的 sql 脚本仓库,存放所有环境(以分支区分或者以子文件夹区分)和所有服务的数据库变更脚本
开发者以 Merge Request 的形式提交改动数据库变更脚本,合并到特定分支之后通过 GitLab CI
Merge Request 的 Pipeline 立马执行一遍语法和风格检查(暂时还没找到这样的工具,各位有推荐吗)
在迭代周期内,开发者会频繁提交修改 dev 环境的数据库变更脚本,上线的时候根据 commits 来将这些变更捡取到其他环境的数据库。同时期望这套流程也能够照顾到给同步客户的私有部署环境的数据库。
目前还没做,具体细节没全想到,主要想看看有没有更好的方案
1
dayeye2006199 2023-04-30 13:37:55 +08:00
你需要一个带 migration 功能的 ORM 。
然后一切都会简单很多。 |
2
eephee OP 我们后端主要是好像没用 orm ,分了二十几个服务吧,都是裸写 SQL :laugh:
|
3
kd9yYw2RyhQwAwzn 2023-04-30 13:48:54 +08:00 1
可以试试 bytebase
|
4
eephee OP @kd9yYw2RyhQwAwzn 嗯嗯,我说的开源产品就是 bytebase ,企业版使用过期之后我发现有一个核心问题:开源版本没法限制开发者访问生产数据库,所以才想着自己 DIY 一套流程的。
|
5
lishoujun 2023-04-30 15:32:07 +08:00
为什么不直接用他们的企业版本呢?
|
6
dreamramon 2023-04-30 15:34:21 +08:00
用的 flyway 很多年了,很方便。
|
7
thevita 2023-04-30 16:26:10 +08:00
看需求吧,如果你的 db 是支撑应用的,把 db 独立于代码管理更复杂吧?这种情况我也推荐用 flyway 这种方案,挺好的
|
8
eephee OP 好我去康康,感谢大佬们!
|
9
jsq2627 2023-04-30 21:51:24 +08:00
|
10
tianzhou 2023-05-04 17:28:20 +08:00
Bytebase 现员工来答一个。如果是在 flyway 和 liquibase 里面挑的话,推荐用 flyway ,开发者体验更好。
不过 Bytebase 和他们不算是同一类型的产品,相当于 GitLab / GitHub 和 Git 之间的区别吧。也可以加入用户群,搜我们的公众号 bytebase 能找到。 |