MSBuild:自动收集数据库迁移脚本?

7

环境概述:

  • Asp.net Web应用程序(源代码存储在svn中)
  • SQL Server数据库(数据库架构(表/存储过程)存储在svn中)
  • 数据库版本与Web应用程序程序集版本同步(存储在“CurrentVersion”表中)
  • CI Hudson服务器检出Web应用程序并运行自定义的MSBuild文件以发布/打包应用程序。

我的MSBuild脚本会在每次构建时更新Web应用程序的程序集版本(Major.Minor.Revision.Build)。 “Revision”设置为当前正在检出的SVN修订版,“Build”设置为Hudson构建号(每次自动构建时递增)。

这样我就可以将应用程序与特定的主干修订版匹配,并从Hudson构建编号获取其他构建统计信息。

我想自动收集迁移脚本(更新的存储过程等),以添加到zip包中。我想通过比较尚未部署到的数据库的SVN修订版和正在部署的修订版来查找自上次部署到该数据库/环境以来在主干上更改的数据库文件。

可以通过手动调用svn diff -r REVNO:REVNO命令来轻松实现此目的,以列出已更改的.sql文件。然后必须手动将这些文件添加到包中。如果能自动化就太好了。

首先,我想编写一个自定义任务来检查尚未部署到的数据库版本。之后我不太确定。是否有人对如何通过现有或自定义的MSBuild任务实现此目标有任何建议?

最后,我需要自动生成一个脚本以添加到包中,该脚本会更新数据库版本表,使其与应用程序同步。


这是一个很棒的问题。我们使用相当多的构建脚本,但我仍然在努力将我们的数据库放入SVN中,有时开发人员对变化非常抵触<sigh> :)。 - Rihan Meij
好的,找到了一个svn命令,可以将更改的文件列表输出到一个xml文件中。通过msbuild处理该xml文件,我应该能够将我需要的单个文件检出到构建工作区。 '>;' 命令是关键 ;) svn diff -r REVNO:REVNO --xml --summarize "svn://PathToTrunk" >; d:/temp.xml - P Dub
4个回答

4
将SQL更改集成到自动构建/部署过程中非常困难。我知道,因为我试过几次,但只有有限的成功。你要做的大致上是正确的,但我认为它实际上有点太复杂了。在你的提案中,你建议在构建/打包时收集需要应用于你的数据库的特定SQL脚本。相反,你应该将所有增量脚本(对于整个数据库历史记录)与你的项目一起打包,并在部署时计算实际需要应用的增量脚本——这样,你可部署包能够部署到具有不同版本数据库的环境中。你需要完成两个实现步骤:
1)你需要将增量脚本打包到你的可部署包中。请注意,你应该打包增量而不是创建当前状态模式的静态文件。这些增量脚本应该在源代码控制中。保持静态模式与增量脚本的同步是可以的,但你必须将其与增量脚本保持同步。你实际上可以使用Red Gate的SQLCompare或VS数据库版本等工具从静态模式生成(大多数)增量。要将增量脚本放入你的可部署包中,并考虑到你正在使用svn,你可能需要考虑将svn:外部作为一种方法将增量脚本“软链接”到你的Web项目中。然后,你的构建脚本可以简单地将它们复制到可部署包中。
2)你需要一个系统来读取增量文件列表,将它们与现有数据库进行比较,确定需要应用于该数据库的增量,然后应用增量(并更新簿记信息,如数据库版本)。有一个名为dbdeploy的开源项目(由ThoughtWorks赞助),可以实现这一点。我个人在这个工具上有一些成功的经验。
祝你好运-这是一个难题(正确)。

2

0

0
今天针对.NET/SQL Server堆栈的可用解决方案有:
  • DBUp(开源)
  • ReadyRoll(更深入的Visual Studio集成,自动生成脚本)

后者是我们在Redgate积极开发的产品。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接