30

似乎有很多不同的方法可以自动化构建/部署,以至于很难解析人们在网络教程中支持的所有不同场景。所以我想向stackoverflow人群提出这个问题......使用以下配置设置自动构建和部署系统的最佳方法是什么:

  • 视觉工作室 2008
  • 网络应用项目
  • CruiseControl.NET

我尝试的第一件事是让 CCnet 自动压缩输出并将其复制到服务器,但这需要手动工作才能在目的地解压缩。但是,如果我们尝试单独复制所有文件,那么如果它是一个大型应用程序,则可能需要很长时间(构建服务器位于我们办公室的数据中心之外......我知道)。

同样特别有趣的是我们将如何支持多种环境,因为我们有 dev、qa、uat,当然还有 prod。

MSDeploy似乎真的很有趣,但除非我对文献的解释不正确,否则在从构建服务器的输出部署的场景中没有帮助。如果有的话,它似乎在跨构建场部署一个构建时很有用......但即使从一个环境部署到另一个环境,也必须手动更改配置设置和 Web 服务 URL 等。

4

7 回答 7

15

我最近花了几天时间在我的公司进行自动化部署。

我们使用 CruiseControl、NAnt、MSBuild 的组合来生成应用程序的发布版本。然后一个单独的脚本使用 MSDeploy 和 XCopy 来备份实时站点并传输新文件。

我们的解决方案在回答这个问题Automate Deployment for Web Applications?

于 2008-09-12T15:29:35.657 回答
6

您可能对MSDeploy感兴趣。是 Scott Hanselman 的帖子。它目前仅作为技术预览版(2008 年 9 月)提供,但值得根据您的要求进行评估。

于 2008-09-11T22:38:31.560 回答
3

还有另一个名为NUBuild的新构建工具(一个非常智能的包装器) 。它的轻量级、开源且极易设置,并提供几乎无接触的维护。我真的很喜欢这个新工具,我们已经将它作为我们项目持续构建和集成过程的标准工具(我们有大约 400 个项目,涉及 75 个开发人员)。试试看。

http://nubuild.codeplex.com/

  • 易于使用的命令行界面
  • 能够针对所有 .Net 框架版本,即 1.1、2.0、3.0 和 3.5
  • 支持基于 XML 的配置
  • 支持项目和文件引用
  • 为给定项目自动生成“完整的有序构建列表”——无需接触维护。
  • 检测和显示循环依赖的能力
  • 执行并行构建 - 自动决定生成的构建列表中的哪些项目可以独立构建。
  • 处理代理程序集的能力
  • 为构建过程提供视觉线索,例如显示“完成百分比”、“当前状态”等。
  • 以 XML 和文本格式生成详细的执行日志
  • 与 Cruise-Control.Net 持续集成系统轻松集成
  • 面向 2.0 + 版本时可以使用自定义记录器,如 XMLLogger
  • 解析错误日志的能力
  • 能够将构建的程序集部署到用户指定的位置
  • 能够将源代码与源代码控制系统同步
  • 版本管理能力
于 2009-08-23T04:41:46.963 回答
2

你有能力远程运行命令吗?SystinternalsPsExec实用程序将允许在远程计算机上运行命令行解压缩程序。如果您有一个将构建作为 .zip 文件复制到远程站点的脚本,则只需多一行 PsExec 调用即可解压缩文件。

于 2008-09-12T15:27:04.507 回答
1

我有一个有关从自动构建中获取一组可部署文件的相关问题。我发现 Web 部署项目(链接和旧问题中的所有内容)满足了我的需求——它们是 VS 和 MSBuild 附加组件。

于 2008-09-12T15:23:13.940 回答
1

这是所有开发的常见问题(我希望我早点阅读它),而不仅仅是 ASP.NET。作为其开发人员之一,我的团队自然在内部使用BuildMaster进行整个发布过程,并且对于大多数场景来说它是免费的。在该工具中,我们能够执行所有标准 CI 构建以创建工件,然后设置自动化流程以将这些工件部署到我们内部或外部托管的 40 多台服务器中的任何一台,具体取决于特定的应用程序或环境.

由于您特别提到了部署到不同的测试环境,这是该工具的一个基本方面。这个想法是对你已经存在的环境工作流程(例如集成 -> QA -> 生产)进行建模,并从根本上促进从源代码控制到生产的整个构建过程。大多数时候,它就像添加一个将工件部署到环境中的部署操作一样简单,而其他时候它可能要复杂得多。

您还随便提到了配置文件更改是部署的一部分,这是 BuildMaster 的另一个内置组件。我们的想法是使用该工具本身作为所有配置文件和部署的中心枢纽,从而确保通过部署计划中的简单“部署配置文件”操作自动应用最新更改。

关于此过程,您没有提到的一件事是数据库部署方面。大多数 ASP.NET 应用程序都需要关联的数据库,否则它们可能只是静态 HTML 文件。每次部署都将数据库模式更新为适当的数据库版本,这一点至关重要。毫不奇怪,BuildMaster 中的一个模块也可以为您处理这个问题。这个想法是将 DDL-DML 脚本存储在工具本身中,并且只执行一次脚本每个环境,它确保您在每个环境中的所有数据库都是最新的,因为您的构建是通过它们部署的。其他脚本(例如存储过程、视图、触发器等)本质上是代码文件,因此属于源代码控制。在大多数情况下,这些 DROP-CREATE-CONFIGURE 类型的脚本每次都可以通过简单的部署操作运行。

大多数开发人员没有考虑的另一个部署难题是流程自动化。许多开发人员需要执行签核或填写变更请求表才能手动执行这些过程。同样,这一切都可以作为 BuildMaster 中自动化工作流程设置的一部分。您可以设置阻止程序,除非所有单元测试都已通过,否则不允许升级到 QA 环境,或者阻止升级到 Staging 环境,除非 QA 团队中的某个人批准构建并且您的问题跟踪工具中的所有问题都已解决/关闭那个特定的版本。

虽然我意识到我在答案中遗漏了 CC.NET,但我们的应用程序都是通过 BuildMaster 构建和部署的,因此我们不再需要它,尽管我们可以轻松地从放置位置获取工件并在以后的环境中部署它们。

于 2013-05-22T16:35:06.210 回答
1

我看到很多人在他们的 .NET 项目中使用 CC,但为什么不使用 Jenkins、Sonarqube?他们得到了你需要的一切。我在 3 天内设置了所有这些。我有一个 Win 2008 服务器 R2、MSSQL、Jenkins、VIsual SVN 和 Sonarqube。

这一切都很好,你会得到你项目的所有指标。Sonarqube 使用 Gallio、Gendarme、FXcop、Stylecop、NDepths 和 PartCover 来获取您的指标,所有这些都非常简单,因为 SonarQube 无需太多配置即可自动执行此操作。

我给你贴了一些照片,你也有感觉。这是 Jenkins 女巫构建和获取声纳指标以及自动部署到 IIS 的另一项工作

还有 Sonarqube,我项目的所有指标。这是一个简单的 MVC4 应用程序,但效果很好!:

如果您想了解更多信息,我可以更具体,但我认为您至少应该考虑詹金斯。如果 CC 更适合您,至少您在选择之前查看了不错的选择。

整个设置使用 MSBuild,也构建和部署应用程序。

于 2013-07-14T11:57:55.137 回答