我正在使用 TeamCity 为我们的测试环境创建 .NET 应用程序(使用 SVN 源代码控制)的 CI 和自动部署,一切进展顺利。我正处于想要自动执行 db 脚本的阶段。我进行了一些搜索并阅读了几篇文章,例如http://www.troyhunt.com/2011/02/automated-database-releases-with.html(troyhunt的博客非常宝贵!),许多人似乎都指出使用 RedGate 软件管理和部署更改。我有点担心让新工具处理脚本生成,所以我想知道是否还有其他公认的方法值得研究。
我们当前的解决方案设计标准包括一个包含数据库相关文件的项目,例如我们的 orm db。它还包含一系列文件夹,其中包含我们的更改脚本,如下图所示。
MySolution
> MySolution.Data
> 3.0 Scripts
* 01 - UpdateUserTable.sql
* 02 - UpdateRoleTable.sql
> 3.1 Scripts
* 01 - CreateJobTable.sql
* 02 - InsertJobTypes.sql
* 03 - AndSoOn.sql
我相信这种结构很重要,因为虽然我们希望在签入时自动部署到我们的测试环境,但我们部署实际版本的频率要低得多,而且我不确定 RedGate 的比较工具是否可以处理有时发生的更改级别。这就是为什么我更愿意为脚本使用版本文件夹,然后在发布时增加次要版本以保持脚本版本整齐地包含。
有了这个预先存在的结构,我倾向于保留它并添加一个 TeamCity 构建定义,它可以在成功部署时应用 db 脚本。我想我可以让 TeamCity 在预期的路径中识别新添加的 .sql 文件到 SVN,然后在服务器上执行这些文件,但也许我期待太多了。我过去使用 TFS 和 MSBUILD 以及自定义构建步骤实现了这种解决方案,但对 TeamCity 方式来说是全新的。
是否已经有实现类似目标的过程?在我看来,这似乎是一个很正常的实现,我只是还没有弄清楚是怎么回事。还是 RedGate 解决方案是我们应该追求的标准?