请教一下关于数据库实现持续集成的工具集以及实践经验

2016-09-05 15:54:20 +08:00
 tomczhen

坐标深圳,传统行业老板投资做平台,不足 20 人的小公司,主要产品是移动端 APP 。 公司情况大概跟各种段子或吐槽差不多,就不细说了,略过。

技术栈

项目代码的版本控制是由 TFS 实现的。 iOS 与 Android 是使用的 Git in TFS ,后端则直接 TFS 。

公司领导对开源系技术栈有着明显的“不信任”偏向,并且后端开发人员,对非 Windows 平台的工具集也有一定的排斥,所以版本控制这块想切换到 Git 上基本没可能。

另外, TFS 触发还有 WinRM 这块,均有看过相关资料,虽然与 IDE 集成度非常高,但是使用成本对公司现状来说一方面领导层不能接受、另一方面开发人员也有排斥。

完全基于微软的工具集实现,一方面增加了项目的复杂度,另一方面微软的东西虽然功能强大,但是我不是后台开发是,这方面推行有难度。而且小公司对持续集成这块的动力本身就不足。

当前情况

目前, iOS 和 Android 都已经实现了基于 Jenkins 的自动构建,自动发布到分发测试平台。(注:没有做到自动化测试。)

API 这块已经选择 FitNesse 搭建了文档与测试平台,不过由于后端开发这边积极度不高,完善度有限,还不能添加到 Jenkins 中跑自动测试,进度也在追。

后台部署这块,当前是使用 SVN 直接提交编译好的二进制文件,然后通过 SVN Hook 脚本做自动部署。( Windows 平台 , IIS )。

也有计划使用 Jenkins 的节点功能做成集中式自动部署(这块正在测试可行性,基本上已经完成了)。

PS:以上可以在我的博客中看到相关的记录。

问题来了

数据库持续集成工具与实践

由于,本人是所谓的"野路子",虽然通过以上工具集的官方文档将持续集成平台搭建起来使用,但是数据库这块实在是资料过少。

目前公司使用的 RDS For SQL Server ,已知的问题是无法使用 dacpac 包部署。

最开始有提议使用 VS + TFS 集成的数据库项目管理流程,被领导以及后台开发以太复杂为由否决(个人也觉得确实复杂)。

目前是使用的 Red Gate 的 SQL Compare 比较差异的方式生升级生产数据库——先生成快照作为 baseline ,然后对比快照与线上库的差异,生成脚本。

现在的问题是,由于区分开发环境、测试环境、生产环境(最近准备再加一个预生产环境),每次升级都是手工对比几次,机械化劳动而且比较容易出错。而且,如何回退的问题总是在困扰着我——单纯的备份还原解决不了数据问题;直接回退结构又有丢失数据的风险。

4518 次点击
所在节点    DevOps
3 条回复
alcarl
2016-09-06 00:26:04 +08:00
sqlserver2012 是可以用企业管理器导出的,对应的命令是啥我不知道,不过我用过这个和 mysqldump 功能差不多的,你可以试试 https://sqlserverdump.codeplex.com/
chilaoqi
2016-09-06 11:13:59 +08:00
tomczhen
2016-09-06 15:19:12 +08:00
@alcarl sql server 这块有个 dac ,做数据库升级挺好用的,不过阿里云 rds for sqlserver 没法用。而且 dcapac 部署的话,也有一些坑,主要是自增字段、触发器、索引这块,得单独处理。不知道有没有其他工具可以方便的输出 sql 脚本。
@chilaoqi flyway 试过了,没找到可以输出升级用 sql 语句的办法。而且这个工具是对开发更友好,对运维来说不太友好。开发环境和生产环境是隔离的,只有 DBA 才能两边都接触(我这边没有专门的 DBA ),所以很纠结啊。

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

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

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

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

© 2021 V2EX