我终于达到了我的解决方案完成构建步骤所需的一切的地步:
- 下载
NuGet
软件包。 - 部署数据库(仅当它不存在时)。
- 构建解决方案。
- 运行任何升级脚本(只需一次,数据库会跟踪这些脚本)。
- 运行单元测试。
- 成功。
这在当地创造了各种奇迹。
现在我想我应该将我的GitHub存储库与AppHarbor集成,因为 CI 对我来说是下一个合乎逻辑的步骤。
问题是,数据库正在分两步构建:
- A
dbproj
被构建,生成一个.dbschema
- 我的数据库升级程序(展示了它所有的DbUp 功能)构建了一个
BeforeBuild
目标,该目标构建和部署dbproj
. 以及一个AfterBuild
自行执行数据库升级程序的目标,使用尚未运行的任何 SQL 脚本更新架构。
问题是项目中的AppHarbor构建服务器失败.dbproj
,因为SqlTasks.target
其服务器配置中缺少必需项。
我尝试快速修复手动添加该目标(以及它所依赖的其他一些目标),但这产生了一个我无法通过的错误:
无法从程序集 Microsoft.Data.Schema.Tasks.Sql [...] 加载“SqlBuildTask”任务
稍微挖掘一下,我发现显然.dbproj
你不能在既VS
没有也没有TFS
安装的环境上构建项目。
我应该如何进行?我可能有几个选择:
手动连接到 AppHarbor 数据库并针对新的生产数据库运行在我的开发环境中生成的部署脚本。
这种破坏一步到位的目的。无需使用
.dbproj
数据库项目,只需在DbUp “升级程序”中包含所有基本安装表。 这有两个问题,尽管它们可能可以解决。第一个是我应该自己创建数据库,第二个是log4net
我用来记录数据库升级过程的表将由进程本身创建,这在我的书中是各种各样的错误。使用一些自定义数据库项目解决方案,我可以在没有此问题的情况下部署数据库。
我真的不知道这样的解决方案,是否存在,它们可靠吗?
欢迎发表意见、部署文章或任何建议,在 AppHarbor 上构建 .dbproj 的快速破解也足够了。
最后,要求AppHarbor包含TFS
和/或VS
在他们的构建服务器中是否太过牵强,构建.dbproj
项目对于构建服务器来说听起来相当合理,对吧?