首页 文章

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

提问于
浏览
30

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

  • Visual Studio 2008

  • Web应用程序项目

  • CruiseControl.NET

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

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

MSDeploy似乎真的很有趣,但除非我在构建服务器的输出部署方案中提供帮助 . 如果有的话,它似乎在整个构建服务器场中部署一个构建时很有用......但即使从一个环境部署到另一个环境,也必须手动更改配置设置和Web服务URL等 .

7 回答

  • 15

    我最近花了几天时间在公司的自动化部署上工作 .

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

    在回答这个问题时简要描述了我们的解决方案Automate Deployment for Web Applications?

  • 1

    您可能对MSDeploy感兴趣 . Here's Scott Hanselman就此发表了一篇文章 . 它目前仅作为技术预览版(2008年9月)提供,但值得根据您的要求进行评估 .

  • 3

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

    http://nubuild.codeplex.com/

    • 易于使用的命令行界面

    • 能够定位所有.Net框架版本,即1.1,2.0,3.0和3.5

    • 支持基于XML的配置

    • 支持项目和文件引用

    • 自动为给定项目生成“完整订购的构建列表” - 无需维护 .

    • 能够检测和显示循环依赖关系

    • 执行并行构建 - 自动决定生成的构建列表中的哪些项目可以独立构建 .

    • 能够处理代理程序集

    • 为构建过程提供视觉线索,例如显示“已完成%”,“当前状态”等

    • 以XML和文本格式生成详细的执行日志

    • 与Cruise-Control.Net持续集成系统轻松集成

    • 在定位2.0版本时可以使用XMLLogger之类的自定义 Logger

    • 能够解析错误日志

    • 能够将构建的程序集部署到用户指定的位置

    • 能够将源代码与源控制系统同步

    • 版本管理功能

  • 2

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

  • 1

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

  • 6

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

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

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

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

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

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

  • 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,也构建和部署应用程序 .

相关问题