【问题标题】:Asp.net Deployment StrategiesAsp.net 部署策略
【发布时间】:2012-07-29 07:15:55
【问题描述】:

我听说过很多部署 asp.net 应用程序的策略,但不太确定哪种策略最适合我的需求。

我有一个 asp.net 4 应用程序。我有单独的开发/登台/生产环境(不同的 web.configs)。我还需要管理 sql server 的更改。我可能有超过 1 个数据库服务器和超过 1 个应用程序服务器来推送更改。理想情况下,我想点击一个按钮并说“部署到登台”或“部署到生产”,它将部署代码/数据库/配置文件带到正确的服务器。理想情况下,我希望有一些回滚过程,以防发布错误。

我听说过 xcopy/robocopy 策略、MSDeploy(现在称为 Web Deploy?)策略以及构建 MSI 包以进行部署。

其中哪一个似乎最适合这种需求?

【问题讨论】:

    标签: asp.net deployment


    【解决方案1】:

    方法#1 如果你有时间花点时间,我建议使用CruiseControl.NET。至少有一段时间,* 团队将其用于部署。

    方法#2 就复制策略而言,我建议将 7zip 和 ftp 组合用于应用程序和媒体。 7Zip 很好,因为它允许您排除文件类型 (web.config)、文件夹和文件类型,并允许您以不同的方式压缩不同的文件。例如,压缩 PNG 是没有意义的。请注意,这每次都会进行完整部署。因此,如果您有大型媒体文件夹,我会单独处理它们。

    至于数据库,我相信使用 Redgate 的 SQL Compare 会为您带来好运。它们是商业应用程序,但它们非常非常好。他们在 * 播客中被多次正面提及。

    • 在开发/构建服务器上构建一个 CMD 文件,该文件生成主 7zip 文件,然后通过 FTP 将其传输到暂存(或生产)服务器上的专用文件夹。我最终多次调用 7zip 将文件输入到单个 7zip 文件中,对每个批次使用不同的压缩方法。
    • 为每个登台或生产服务器构建一个 CMD 文件。该文件将执行正确的文件备份,并将 7zip 文件解压缩到正确的位置。

    部署到暂存将如下所示:

    • 执行 7zip-prep 命令文件,这将触发 FTP 上传到临时服务器上的专用 FTP 文件夹
    • 通过 SQL Compare 生成的脚本对暂存数据库服务器执行 DB 更改
    • 在暂存服务器上执行 7zip 提取命令文件

    这是我使用的方法。我没有花时间掌握 CruiseControl.NET,但当我这样做时,我可能会使用它,至少对于更大的应用程序。这不是一键式部署,但它允许每天进行多次高效部署(就像我几年来一直在做的那样)。 7zip 方法很好,因为一旦你有了你的命令文件,你就可以很快地复制它们并将它们用于新项目。

    【讨论】: