如何将ASP.NET应用程序部署到实时服务器?

Dar*_*rov 103 asp.net deployment

我正在寻找用于将ASP.NET Web应用程序项目( ASP.NET网站)部署到生产中的不同技术/工具?

我对持续集成构建服务器在某个位置删除二进制文件的时间与第一个用户请求命中这些二进制文件的时间之间发生的工作流程特别感兴趣.

  1. 您使用的是某些特定工具还是只使用XCOPY?如何打包应用程序(ZIP,MSI,...)?

  2. 首次部署应用程序时,如何设置应用程序池和虚拟目录(您是手动创建还是使用某些工具创建它们)?

  3. 当静态资源发生更改(CSS,JS或图像文件)时,您是重新部署整个应用程序还是只重新部署修改后的资源?汇编/ ASPX页面何时更改?

  4. 您是否跟踪给定应用程序的所有已部署版本,如果出现问题,您是否有将应用程序恢复到先前已知工作状态的过程?

随意完成以前的列表.


以下是我们用于部署ASP.NET应用程序的内容:

  1. 我们向解决方案添加了Web部署项目,并将其设置为构建ASP.NET Web应用程序
  2. 我们将一个安装项目( Web安装项目)添加到解决方案中,并将其设置为获取Web部署项目的输出
  3. 我们添加了一个自定义安装操作,在OnInstall事件中,我们运行一个自定义生成.NET程序集,使用System.DirectoryServices.DirectoryEntry在IIS中创建一个App Pool和一个虚拟目录(此任务仅在第一次部署应用程序时执行) .我们支持IIS中的多个网站,虚拟目录的身份验证以及为应用程序池设置身份.
  4. 我们在TFS中添加一个自定义任务来构建安装项目(TFS不支持安装项目,所以我们必须使用devenv.exe来构建MSI)
  5. MSI安装在实时服务器上(如果首先卸载了MSI的先前版本)

kem*_*002 25

我们使用Setup Factory在MSI中部署了所有代码.如果必须改变某些事情,我们会重新部署整个解决方案.对于css文件来说这听起来有些过分,但它绝对保持所有环境同步,我们确切地知道生产中的内容(我们以相同的方式部署到所有测试和uat环境).


Mar*_*ell 19

我们对实时服务器进行滚动部署,因此我们不使用安装程序项目; 我们有更像CI的东西:

  • "实时"构建服务器构建来自批准的源(不是回购的"HEAD")
  • (在备份之后;-p)
  • robocopy发布到登台服务器("实时",但不在F5集群中)
  • 在登台服务器上完成最终验证,通常使用"主机"黑客来尽可能地模拟整个事物
  • robocopy/L自动用于在下一次"推送"中分发更改列表,以提醒任何傻瓜
  • 作为计划进程的一部分,群集将循环,通过robocopy部署到群集中的节点(当它们不在群集中时)

robocopy会自动确保仅部署更改.

重新申请App Pool等; 我喜欢这个实现自动化(见这个问题),但在那一刻它是手动的.不过,我真的想改变它.

(这可能有助于我们拥有自己的数据中心和服务器场"现场",因此我们不必跨越许多障碍)


nik*_*3ro 7

网站

部署人员:http: //www.codeproject.com/KB/install/deployer.aspx

我将网站发布到本地文件夹,压缩它,然后通过FTP上传.服务器上的部署者然后提取zip,替换配置值(在Web.Config和其他文件中),就是这样.

当然,对于第一次运行,您需要连接到服务器并设置IIS WebSite,数据库,但之后发布更新是小菜一碟.

数据库

为了使数据库保持同步,请使用http://www.red-gate.com/products/sql-development/sql-compare/

如果服务器落后于一堆路由器并且您无法直接连接(这是SQL Compare的要求),请使用https://secure.logmein.com/products/hamachi2/来创建VPN.


Jus*_*tin 5

我主要将ASP.NET应用程序部署到Linux服务器,并重新部署所有内容,即使是最小的更改.这是我的标准工作流程:

  • 我使用源代码存储库(如Subversion)
  • 在服务器上,我有一个执行以下操作的bash脚本:
    • 查看最新代码
    • 是否构建(创建DLL)
    • 将文件过滤到基本要素(例如删除代码文件)
    • 备份数据库
    • 将文件部署到以当前日期命名的目录中的Web服务器
    • 如果部署中包含新架构,则更新数据库
    • 使新安装成为默认安装,以便在下次命中时提供

Checkout是使用Subversion的命令行版本完成的,并且使用xbuild完成构建(msbuild类似于Mono项目).大多数魔法都是在ReleaseIt中完成的.

在我的开发服务器上,我基本上有持续集成,但在生产方面,我实际上是SSH到服务器并通过运行脚本手动启动部署.我的脚本被巧妙地称为"部署",这就是我在bash提示符下键入的内容.我很有创意.不.

在生产中,我必须两次输入'deploy':一次签出,构建和部署到一个过时的目录,一次将该目录作为默认实例.由于目录已过时,我只需在相关目录中键入"deploy"即可恢复到以前的任何部署.

初始部署需要几分钟,并且恢复到先前版本需要几秒钟.

它对我来说是一个很好的解决方案,仅依赖于三个命令行实用程序(svn,xbuild和releaseit),DB客户端,SSH和Bash.

我真的需要在CodePlex上更新ReleaseIt的副本:

http://releaseit.codeplex.com/