在自动构建之前部署/运行数据库更改

时间:2010-04-20 09:26:56

标签: sql-server visual-studio deployment continuous-integration build-automation

我使用的是SQL Server和Visual Studio。我通过CCNET自动构建。当我在SVN中提交代码时,自动构建运行并且所有单元测试都使用模拟/存根数据运行。

现在唯一不自动的是运行数据库更改/脚本,我手动完成。任何人都有提示如何自动化?

2 个答案:

答案 0 :(得分:2)

显然,你需要自动运行数据库更改脚本 - 这就是你如何决定运行什么的挑战。答案是,您需要将模式版本存储在数据库中(或数据库元数据中),并选择相应运行的脚本 - 无论是从头开始使用数据库还是应用适当的更改。

我的解决方案是将我的数据库架构维护完全放在代码中,我认为这是我迄今为止所做的最好的写入版本:

How to create "embedded" SQL 2008 database file if it doesn't exist?

鉴于代码足够聪明,可以在应用程序内或在自己的控制台应用程序中内联升级架构,您应该能够将自动架构更改集成到CI构建脚本中。

自从我编写上述内容以来,我一直在追逐这一点 - 事实证明,我所做的与Ruby Migrations没有什么不同(我相信在Subsonic中也有类似功能),除非我不这样做目前有任何“向下”能力来扭转架构变化(一个有趣的想法,我担心潜在的破坏性代码“直播”)。有一个看起来很有用的开源.NET项目Migrator.net,但我不确定它的维护有多积极。


<强>附录

自从我写这个实体框架代码以来,它首先出现并且他们开始在迁移方面取得进展 - 所以现在值得一看。但是我不认为它已经存在,并且像我看到的其他几个选项并不简单。我需要把我打包并使它可用!

答案 1 :(得分:2)

有很多方法可以解决这个问题。我在许多公司中使用过的方法我记录了here,基本上它是处理自动化数据库更新任务的源代码,以及对hows和whys的一些解释。

我还建议查看Data Dude(只是谷歌),我还没有使用它,但我的理解是它可以用来自动化db更新(可能是错误的)。

我会说我不建议使用数据库比较工具来生成脚本......不必特别小心。问题通常是您将dev db(您的更改所在位置)与构建框db进行比较,但您的数据库可能包含(并且可能会)您为“正在进行的工作”所做的其他更改错误修复您可能正在工作上。

无论如何,就像我说的那样,有很多方法可以做,调查一些选项并选择最适合你和你团队风格的选项。

快乐自动化: - )