【问题标题】:MSBuild: automate collecting of db migration scripts?MSBuild:自动收集数据库迁移脚本?
【发布时间】:2010-05-20 09:44:28
【问题描述】:

环境总结。

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

我的 msbuild 脚本会在每次构建时更新 Web 应用程序的程序集版本 (Major.Minor.Revision.Build)。 'Revision' 设置为当前签出的 svn 版本,'Build' 设置为 hudson 内部版本号(在每次自动构建时递增)。

通过这种方式,我可以将应用程序与特定的主干修订版相匹配,还可以从 hudson 内部版本号中获取其他构建统计信息。

我想自动收集迁移脚本(更新的存储过程等)以添加到 zip 包中。 我想通过将尚未部署到的 db 的 svn 修订版与正在部署的修订版进行比较,我可以找到自上次部署到该数据库/环境以来主干中的哪些 db 文件发生了变化。

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

首先我想我必须编写一个自定义任务来检查尚未部署到的数据库版本。在那之后,我很不确定。 有没有人对如何通过现有或自定义的 msbuild 任务来实现这一点有任何建议?

最后我必须自动生成一个脚本来添加到更新数据库版本表的包中,以便与应用程序同步。

【问题讨论】:

  • 这是一个可怕的问题。我们使用了相当多的构建脚本,但我仍在努力将我们的数据库导入 SVN,有时开发人员可能会拒绝更改 :)
  • 好的,找到了一个 svn 命令,它可以将更改的文件列表输出到 xml 文件。从那我应该能够通过 msbuild 处理该 xml 文件,以将我需要的单个文件签出到构建工作区。 '>;'命令是关键 ;) svn diff -r REVNO:REVNO --xml --summarize "svn://PathToTrunk" >; d:/temp.xml

标签: asp.net sql-server svn msbuild continuous-integration


【解决方案1】:

将 SQL 更改集成到自动构建/部署过程中是困难的。我知道,因为我已经尝试了几次,但效果有限。您正在尝试做的事情大致在正确的轨道上,但我认为它实际上有点太复杂了。在您的提案中,您建议在构建/打包时收集需要应用于您的数据库的特定 SQL 脚本。相反,您应该将所有您的增量脚本(用于数据库的整个历史)打包到您的项目中,并计算在您部署时实际需要应用的增量 - - 这样,您的可部署包可以部署到具有不同版本数据库的环境中。要实现这一点,您需要两个实现部分:

1) 您需要将增量打包到可部署的包中。请注意,您应该打包 deltas - 而不是在当前状态下创建模式的静态文件。这些增量脚本应该在源代码控制中。也可以将静态模式保留在源代码管理中,但您必须使其与增量同步。实际上,您可以使用 Red Gate 的 SQLCompare 或 VS 数据库版本等工具从静态模式生成(大多数)增量。要将 deltas 放入您的可部署包中,并且考虑到您正在使用 svn - 您可能希望查看 svn:externals 作为将 delta 脚本“软链接”到您的 Web 项目中的一种方式。然后,您的构建脚本可以简单地将它们复制到您的可部署包中。

2) 您需要一个可以读取 delta 文件列表的系统,将它们与现有数据库进行比较,确定需要将哪些 delta 应用于该数据库,然后应用 delta(并更新簿记信息,例如数据库版本)。有一个名为 dbdeploy 的开源项目(由 ThoughtWorks 赞助)可以完成此任务。我个人在该工具上取得了一些成功。

祝你好运——这是一个难以破解的难题(正确地)。

【讨论】:

    【解决方案2】:

    查看 SQL 数据库项目。在 VS 2010 中,它们得到了相当大的增强,并内置了可以将您的 DEV 数据库同步到其他环境的部署功能。

    这里有一些关于 vs 2010 中 DB 项目的好链接: http://msmvps.com/blogs/deborahk/archive/2010/05/02/vs-2010-database-project-building-and-deployment.aspx

    http://weblogs.asp.net/gunnarpeipman/archive/2009/07/29/visual-studio-2010-database-projects.aspx

    【讨论】:

      【解决方案3】:

      试用 SQL 检查器: http://www.sqlaccessories.com/Howto/Version_Control.aspx

      您可以使用 SQL Examiner 命令行工具自动收集脚本。

      【讨论】:

        【解决方案4】:

        目前针对 .NET/SQL Server 堆栈的可用解决方案有:

        • DBUp(开源)
        • ReadyRoll(更深层次的 Visual Studio 集成, 自动生成脚本)

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

        【讨论】:

          猜你喜欢
          • 2012-12-28
          • 1970-01-01
          • 2017-03-04
          • 2011-12-10
          • 2017-02-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-19
          相关资源
          最近更新 更多