分步ASP.NET自动构建/部署

时间:2008-09-11 22:01:10

标签: asp.net iis deployment

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

  • Visual Studio 2008
  • Web应用程序项目
  • CruiseControl.NET

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

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

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

7 个答案:

答案 0 :(得分:15)

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

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

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

的答案中简要描述

答案 1 :(得分:6)

您可能对MSDeploy感兴趣。 Here's斯科特汉塞尔曼就此发表文章。它目前仅作为技术预览版(2008年9月)提供,但值得根据您的要求进行评估。

答案 2 :(得分:3)

还有另一个名为 NUBuild 的新构建工具(一个非常智能的包装器)。它重量轻,开源,非常易于安装,几乎不需要维护。我非常喜欢这个新工具,我们已经成为我们项目持续构建和集成过程的标准工具(我们在75个开发人员中拥有大约400个项目)。尝试一下。

http://nubuild.codeplex.com/

  • 易于使用的命令行界面
  • 能够定位所有.Net框架 版本,即1.1,2.0,3.0和3.5
  • 支持基于XML的配置
  • 支持项目和文件 参考
  • 自动生成“完成 有序的构建列表“给定的 项目 - 无需维护。
  • 能够检测和显示 循环依赖
  • 执行并行构建 - 自动决定哪个 生成的构建列表中的项目 可以独立建造。
  • 处理代理程序集的能力
  • 为构建提供视觉线索 过程例如显示“已完成%”, “现状”等。
  • 生成详细的执行日志 XML和文本格式
  • 轻松集成 Cruise-Control.Net连续 整合系统
  • 可以使用XMLLogger之类的自定义记录器 在定位2.0 +版本时
  • 能够解析错误日志
  • 能够将构建的程序集部署到 用户指定的位置
  • 能够同步源代码 与源控制系统
  • 版本管理功能

答案 3 :(得分:2)

您是否能够远程运行命令?来自PsExecSystinternals实用程序将允许在远程计算机上运行命令行解压缩程序。如果你有一个脚本将构建版本作为.zip文件复制到远程站点,那么你只需要一行PsExec调用来解压缩文件。

答案 4 :(得分:1)

我有一个related question关于从自动构建中获取可部署的文件集。我发现Web部署项目(链接和旧问题中的所有内容)完成了我需要的工作 - 他们是VS和MSBuild插件。

答案 5 :(得分:1)

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

由于您特别提到了部署到不同的测试环境,这是该工具的一个基本方面。我们的想法是对您已经拥有的环境工作流程(例如,Integration - > QA - > Production)进行建模,并从根本上推动从源代码控制到生产的构建。大多数情况下,它就像添加将工件部署到环境的部署操作一样简单,有时可能会复杂得多。

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

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

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

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

答案 6 :(得分:1)

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

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

我发布som图片给你也感觉到了。以下是Jenkins女巫构建并获取Sonar指标以及另一个自动部署到IIS的工作

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

如果你想了解更多信息我可以更具体,但我认为你至少应该考虑詹金斯。如果CC套装你更好,至少在你选择之前你会考虑好的选择。

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