关于iis:循序渐进的ASP.NET自动化构建/部署

Step-By-Step ASP.NET Automated Build/Deploy

似乎有很多不同的方法可以自动执行构建/部署,因此很难通过人们在网络教程中支持的所有不同方案来进行分析。因此,我想向stackoverflow人群介绍这个问题...使用以下配置来设置自动化构建和部署系统的最佳方法是什么:

  • Visual Studio 2008年
  • 网络应用项目
  • CruiseControl.NET

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

同样特别令人感兴趣的是,当我们拥有dev,qa,uat和prod之后,我们将如何支持多种环境。

MSDeploy看起来确实很有趣,但是除非我对文献有错误的解释,否则在从生成服务器的输出进行部署的情况下将无济于事。如果有的话,在整个构建场中部署一个构建似乎很有用……但是,即使是从一个环境部署到另一个环境,也必须手动更改配置设置和Web服务URL等。


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

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

在对这个问题的答案中简要描述了我们的解决方案。


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


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

http://nubuild.codeplex.com/

  • 易于使用的命令行界面
  • 针对所有.Net框架的能力
    版本,即1.1、2.0、3.0和3.5
  • 支持基于XML的配置
  • 支持项目和文件
    参考资料
  • 自动生成"完整
    给定的构建清单"
    项目–无需触摸维护。
  • 能够检测和显示
    循环依赖
  • 执行并行构建-
    自动决定哪个
    生成的构建列表中的项目
    可以独立构建。
  • 处理代理程序集的能力
  • 提供构建的视觉线索
    处理显示"完成百分比",
    "当前状态"等
  • 生成详细的执行日志
    XML和文本格式
  • 轻松整合
    Cruise-Control.Net连续
    整合系统
  • 可以使用自定义记录器,例如XMLLogger
    定位到2.0及更高版本时
  • 解析错误日志的能力
  • 能够将构建的程序集部署到
    用户指定的位置
  • 能够同步源代码
    带源控制系统
  • 版本管理能力

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


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

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

我为您发布了som图片,您也对此有一种感觉。这是詹金斯(Jenkins)的女巫构建并获取声纳(Sonar)指标,以及另一项自动部署到IIS的工作

>
</p>
<p>
Sonarqube,这是我项目的所有指标。这是一个简单的MVC4应用,但效果很好!
</p>
<p>
<img src=

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

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

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


我有一个有关从自动化构建中获取可部署文件集的相关问题。我发现Web部署项目(所有链接和旧问题中的所有内容)都能满足我的需要-它们是VS和MSBuild加载项。


推荐阅读