Asp.net MSBuild:是否自动收集数据库迁移脚本?
环境概述Asp.net MSBuild:是否自动收集数据库迁移脚本?,asp.net,sql-server,svn,msbuild,continuous-integration,Asp.net,Sql Server,Svn,Msbuild,Continuous Integration,环境概述 Asp.net web应用程序(源代码存储在svn中) SQL Server数据库。(存储在svn中的数据库架构(表/存储过程) db版本与web应用程序集版本同步。(存储在表“CurrentVersion”中) CI hudson服务器,用于从repo签出web应用程序并运行自定义msbuild文件以发布/打包应用程序 我的msbuild脚本在每个生成上更新web应用程序的程序集版本(Major.Minor.Revision.Build)。“版本”设置为当前签出的svn版本,“版
- Asp.net web应用程序(源代码存储在svn中)
- SQL Server数据库。(存储在svn中的数据库架构(表/存储过程)
- db版本与web应用程序集版本同步。(存储在表“CurrentVersion”中)
- CI hudson服务器,用于从repo签出web应用程序并运行自定义msbuild文件以发布/打包应用程序
svn diff-r REVNO:REVNO
命令列出更改的.sql文件来轻松实现。然后,这些文件可能必须手动添加到包中。
如果这可以自动化,那就太好了
首先,我想我必须编写一个自定义任务来检查尚未部署到的db版本。在那之后,我很不确定。
对于如何通过现有或自定义的msbuild任务实现这一点,有人有什么建议吗
最后,我必须自动生成一个脚本,添加到更新数据库版本表的包中,以便与应用程序同步。看看SQL数据库项目。在VS2010中,它们得到了相当大的增强,并具有内置的部署功能,可以将您的开发人员数据库同步到其他环境 以下是一些关于vs 2010中DB项目的好链接: 试试SQL考官:
您可以使用SQL检查器命令行工具自动收集脚本。将SQL更改集成到自动构建/部署过程中是很困难的。我知道,因为我已经尝试过几次了,但成功有限。你试图做的大致上是正确的,但我认为这实际上有点太复杂了。在您的建议中,您建议收集需要在构建/打包时应用于数据库的特定SQL脚本。相反,您应该将所有增量脚本(用于数据库的整个历史记录)打包到项目中,并计算部署时实际需要应用的增量——这样,您的可部署包就可以部署到具有不同版本数据库的环境中。要实现这一点,您需要两个实现部分: 1) 您需要将增量打包到可部署包中。请注意,您应该打包增量,而不是在当前状态下创建模式的静态文件。这些增量脚本应该在源代码管理中。在源代码管理中也可以保持静态模式,但必须使其与增量保持同步。实际上,您可以使用诸如Red Gate的SQLCompare或VS数据库版本之类的工具从静态模式生成(大多数)增量。要将增量放入可部署包中,并且考虑到您正在使用svn,您可能需要研究svn:externals,将增量脚本“软链接”到web项目中。然后,构建脚本可以简单地将它们复制到可部署包中 2) 您需要一个能够读取增量文件列表、将其与现有数据库进行比较、确定需要应用于该数据库的增量,然后应用增量(并更新簿记信息,如数据库版本)的系统。有一个开源项目(由ThoughtWorks赞助)实现了这一点。我个人使用该工具取得了一些成功
祝你好运——这是一个(正确的)难题。目前针对.NET/SQL Server堆栈的解决方案有:
- (开源)
- (更深入的Visual Studio集成, 自动生成脚本)
后一种产品是我们在Redgate积极开发的产品。这是一个非常棘手的问题。我们使用了相当多的构建脚本,但我仍在努力将DB转换为SVN,有时开发人员会非常抵制更改:)好的,找到了一个SVN命令,它可以将更改的文件列表输出到xml文件。因此,我应该能够通过msbuild处理该xml文件,以将所需的各个文件签出到构建工作区。“>;”命令是关键;)svn diff-r REVNO:REVNO--xml--summary“svn://PathToTrunk" >; d:/temp.xml