多个平台的产品安装程序中的流畅迁移

时间:2012-08-21 10:16:05

标签: installer wix database-migration fluent-migrator

我们为外部付费客户开发产品(即我们不是仅为我们控制范围内的环境生产产品的内部IT功能),我们目前必须支持SQL Server 2005+和Oracle 10.2+作为后端。我们将TeamCity与Wix用于CI并构建到我们的测试团队,显然,最终在我们的客户签署测试时。目前,我们有无数的SQL脚本来升级数据库。在最基本的形式中,可能有一个DDL脚本和一个数据脚本(每个版本,每个平台),但也可能有包含存储过程的脚本,甚至是客户端特定的脚本。根据客户端升级的版本数量(例如2.0到2.7),他们可能需要以正确的顺序运行多达24个脚本。

显然存在很多人为错误的范围,并且目前无法降级并且由于脚本的自动版本编号存在缺陷(以及数据库记录已运行的脚本的相当简单的方式) ,并不总是清楚在DB上运行了什么。显然这不是一个很好的情况。

我正在调查Fluent Migrator的使用,或类似的 - 不一定是流利的 - 尝试为整个过程带来更多的订单和版本控制,但是虽然有很多文章和示例如何将其与CI一起使用我无法将迁移集成到MSI安装程序或类似设备中。

我想要做的是将其作为整体安装程序的一部分,或者专门用于升级/降级数据库。暂且不考虑任何客户端特定的迁移,是否可以从这样的安装程序执行通用迁移?如果是这样,如何在单个安装程序中定位多个平台(即同时提供SQL和Oracle迁移,并在运行时使用)?

我的计划是将迁移保留在单个程序集中(类似于this article中的说明),并让安装程序根据创建安装程序时出现的信息执行适当的上/下迁移。假设它可以完成,这听起来像是一个明智的解决方案,还是有更好的方法来管理我不知道的所有这些?

非常感谢

史蒂夫

1 个答案:

答案 0 :(得分:1)

是的,这绝对是可能的。

要从您自己的代码运行FluentMigrator,您只需创建一个RunnerContext并执行它。有关示例(或NAnt runner),请参阅Console runner

对于不同平台的定位,您可以在执行RunnerContext时通过数据库参数传入数据库类型来控制它。其他选项是传入ApplicationContext以在迁移中使用。或者使用可以在迁移时设置的Tags过滤。