V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tomczhen
V2EX  ›  DevOps

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

  •  1
     
  •   tomczhen · 2016-09-05 15:54:20 +08:00 · 4373 次点击
    这是一个创建于 2788 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    技术栈

    • 后端开发语言 C#,数据库 SQL Server

    • 移动端 iOS 和 Android

    项目代码的版本控制是由 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 ,然后对比快照与线上库的差异,生成脚本。

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

    • 请问各位 dalao 有没有觉得好用的工具(不限于 SQL Server ) ?最好是开源的。(现在用的破解版,囧。)

    • 另外数据库升级这块能否介绍一下实践经验?特别是回退这块的。

    3 条回复    2016-09-06 15:19:12 +08:00
    alcarl
        1
    alcarl  
       2016-09-06 00:26:04 +08:00
    sqlserver2012 是可以用企业管理器导出的,对应的命令是啥我不知道,不过我用过这个和 mysqldump 功能差不多的,你可以试试 https://sqlserverdump.codeplex.com/
    tomczhen
        3
    tomczhen  
    OP
       2016-09-06 15:19:12 +08:00
    @alcarl sql server 这块有个 dac ,做数据库升级挺好用的,不过阿里云 rds for sqlserver 没法用。而且 dcapac 部署的话,也有一些坑,主要是自增字段、触发器、索引这块,得单独处理。不知道有没有其他工具可以方便的输出 sql 脚本。
    @chilaoqi flyway 试过了,没找到可以输出升级用 sql 语句的办法。而且这个工具是对开发更友好,对运维来说不太友好。开发环境和生产环境是隔离的,只有 DBA 才能两边都接触(我这边没有专门的 DBA ),所以很纠结啊。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5778 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 01:49 · PVG 09:49 · LAX 18:49 · JFK 21:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.