2

所以我正处于开发我们的持续集成实践的阵痛中。我们是一家 .Net/MSSQL 商店。我们很快就会使用 VS2012。我们已经为 CI 服务器选择了 CruiseControl.Net,使用 msbuild 来编译我们的项目。我们使用 SVN(可能稍后切换到 Git,但这是另一个讨论)进行源代码控制。我倾向于使用 InstallShield 将代码包(通常是 Web 应用程序和/或批处理可执行文件)部署到我们的 QA 和生产服务器。(CCNet 将构建这些 MSI 作为我们 CI 的一部分。)我们也开始在我们的项目中包含单元测试,并将使用与 CCNet 集成的 NUnit 在签入时自动运行它们。

到目前为止,这适用于我们的标准 Web 应用程序/exe 开发。它(还)不适合的地方是我们的 MSSQL 变更管理,或者缺少它。我们如何做到这一点真是太牛了。有些人使用过 Migrator.Net。其他人只是与 Redgate 进行 SQL 比较并生成脚本。还有一些人有手写的 sql 脚本。它可能在也可能不在SVN中。数据库级别的“源代码控制”基本上是“我们有数据库的备份”。 嘘,嘶嘶声。不用说,如果我们想要与 CI 和部署保持一致,我们需要解决一些问题。到目前为止,我倾向于使用 VS SQL 项目来处理变更管理和部署。

注意:我们(开发人员)不应该推动更改。系统管理员会这样做。所以我们不能运行任何东西来部署代码或sql。

因此,需要解决 2 个问题(我认为):

  1. 使用什么“技术”,以便我们的 CI 服务器删除数据库的 CI 版本,以便可以针对它进行单元测试。我已经确定 VS2012 SQL 项目可以做到这一点。CCNet 可以针对重新创建数据库的 db 项目运行 msbuild。这相当容易。

  2. 如何为我们的 QA 和 prod 环境生成更改脚本?这个我卡住了。

VS 可以进行模式比较,然后生成 sql 脚本——但它依赖于 sqlcmd。所以我们的系统管理员必须从命令提示符运行 sqlcmd 来部署它……可能并不理想。正确的?

我可以再次运行 msbuild 进行部署……但我不想重新创建数据库,我只想部署更改。

那么这里有哪些选择呢?我需要一些独立的东西供管理员运行——并签入到 SVN。我应该为数据库部署制作另一个 msi 吗?CCNet/msbuild 可以为系统管理员可以双击并进入的数据库更改(而不是重新创建)制作其他类型的“部署包”吗?

大家都是怎么处理的?

谢谢汤姆

4

1 回答 1

3

从 Microsoft 站点查看SQL Server Data Tools 包

这将注册一个新的 SQL Server 2012 数据库类型项目以包含所有数据库结构的定义。在构建时,这将生成一个创建脚本,您可以使用它来部署您的数据库。

然后为了升级您的数据库,使用 SQLPACKAGE.EXE 工具使用创建脚本和目标数据库服务器名称来生成 Update.sql 脚本。

更新:同样关于如何运行单元测试的问题,您可以创建补充方法,通过启动进程并将路径传递给输出 create.sql 脚本来调用创建脚本,然后让您的测试“拆除”数据库使用相同的方法,但带有一个 drop database 语句。

于 2013-06-17T19:20:37.617 回答