软件管理:通过什么方式能保障测试环境与生产环境:表结构、表的初始化数据一致?

2024-08-12 10:10:38 +08:00
 yiyiniu

场景描述

软件项目开发过程中:有测试环境、生产环境

  1. 大家经常在测试环境中,数据库里添加表、添加字段、添加了初始化的数据了
  2. 上线生产环境时,总是会发现:某个表的字段没有添加,初始化的一个配置表数据没初始化上。

请问大家有什么好的方式:能通知或者记录或者其他形式,来避免这种配置数据呀、表结构呀遗漏的问题呢?

目前通过 Gitlab 实现代码统一管理; 通过 Navicat 中数据库结构的比较,避免表结构的遗漏; 但是仍有一些初始化的数据,在上线后会遗漏。

4252 次点击
所在节点    程序员
45 条回复
t298
2024-08-12 10:15:12 +08:00
Flyway?
jmllx1963
2024-08-12 10:16:41 +08:00
forvvvv123
2024-08-12 10:19:24 +08:00
把大家测试环境 DB 的建表和修改表权限全回收了,然后做个网页工具管理表结构,测试环境生产环境也只有这个工具有权限改,所有变动只能 网页工具=>改测试环境=>改生产环境; 这样就行了;

然后定个规定,私自搭建测试环境 db 罚钱;
linjian
2024-08-12 10:21:23 +08:00
liquibase
InkStone
2024-08-12 10:24:15 +08:00
赞同三楼,这种一致性需要流程保障
28Sv0ngQfIE7Yloe
2024-08-12 10:26:13 +08:00
alter table 以及 create table 的操作都要放到 migrate 脚本里,并且准备好执行失败的回滚脚本
pangdundun996
2024-08-12 10:28:00 +08:00
ddl 也作为交付物放到 git 中管理起来,标准化需求上线 checklist
Mystery0
2024-08-12 10:29:17 +08:00
上生产谁的 sql 出问题就扣钱,执行一段时间之后,开发人员自己会想办法做一个流程来避免问题
fds
2024-08-12 10:30:40 +08:00
我见过的不少 ORM 都有带版本管理的,会自动应用代码库里的 schema 变更。这些 migration 也可以手动升降。比如:
https://docs.edgedb.com/get-started/migrations
https://hexdocs.pm/ecto_sql/Ecto.Migration.html
killva4624
2024-08-12 10:33:20 +08:00
SQL 文件也要版本化管理,V1.0 ~ V1.5 顺序执行,数据库已执行的 SQL 要有对应版本号信息(你甚至可以直接建一个表记录当前版本号)。
基于这点的原则下去管理,GiT 也好、开源工具也好。
nuistzhou
2024-08-12 10:35:56 +08:00
dbt ?
NoobNoob030
2024-08-12 10:36:04 +08:00
datagrip 表结构对比工具
XiLingHost
2024-08-12 10:43:13 +08:00
不要让开发操作数据库,要改就在本地 dev 环境改,测试环境和生产环境一律使用 migration sql 脚本和 init 脚本跑数据库迁移/升级和初始化,这些脚本随自动构建产生的制品提供,比如在 docker 镜像里打包并在服务启动时执行,必须确保幂等性
securityCoding
2024-08-12 10:49:15 +08:00
ddl 也得放到发布单 checklist 里面接受 review
leyfung
2024-08-12 10:50:44 +08:00
navicat 同步数据,表结构比较
jaylee4869
2024-08-12 10:51:40 +08:00
flyway 原生 SQL 可以直接基于版本维护变更,同时支持多数语言 SDK
yiqiao
2024-08-12 10:53:17 +08:00
migration 迁移文件呀。别在测试服手动添加表和表字段。
twofox
2024-08-12 10:54:13 +08:00
liquibase 和 Flyway 不就是做这个事情的吗
Rennen
2024-08-12 10:56:54 +08:00
在某司实习用的确实是三楼的方法
另外还有发布时 checklist
sampeng
2024-08-12 11:12:22 +08:00
现在几乎所有语言都有 migration 框架。。。
之前招了一个哥们死活不同意用,嫌弃麻烦和脱裤子放屁,那就让他浪。三天两头上线忘记字段,然后。。然后就老实了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1064262

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX