加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – MSBuild:自动收集db迁移脚本?

发布时间:2020-12-16 04:09:17 所属栏目:asp.Net 来源:网络整理
导读:环境概要. Asp.net Web应用程序(存储在svn中的源代码) SQL Server数据库. (存储在svn中的数据库模式(表/ sprocs)) db version与Web应用程序程序集版本同步. (存储在表’CurrentVersion’中) CI hudson服务器从repo检出Web应用程序并运行自定义msbuild文件以
环境概要.

> Asp.net Web应用程序(存储在svn中的源代码)
> SQL Server数据库. (存储在svn中的数据库模式(表/ sprocs))
> db version与Web应用程序程序集版本同步. (存储在表’CurrentVersion’中)
> CI hudson服务器从repo检出Web应用程序并运行自定义msbuild文件以发布/打包应用程序.

我的msbuild脚本在每个构建上更新Web应用程序(Major.Minor.Revision.Build)的程序集版本. ‘Revision’设置为当前检出的svn版本和’build’到hudson内部版本号(在每个自动构建时递增).

这样我可以将应用程序与特定的主干版本匹配,也可以从hudson内部版本号获取其他构建统计信息.

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

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

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

最后,我必须自动将脚本添加到更新数据库版本表的包中,以便与应用程序保持同步.

解决方法

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

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

2)您需要一个系统,可以读取增量文件列表,将它们与现有数据库进行比较,确定需要将哪些增量应用于该数据库,然后应用增量(并更新簿记信息,如数据库版本) .有一个名为dbdeploy的开源项目(由ThoughtWorks赞助)实现了这一目标.我亲自用这个工具取得了一些成功.

祝你好运 – 这是一个难以破解(正确).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读