我正在寻找您用于将ASP.NET Web应用程序项目( NOT ASP.NET网站)部署到生产中的不同技术/工具?
我对持续集成构建服务器在某个位置删除二进制文件的时间与第一个用户请求命中这些二进制文件的时间之间发生的工作流程特别感兴趣。
您使用的是某些特定工具还是只使用XCOPY?如何打包应用程序(ZIP,MSI,...)?
首次部署应用程序时,如何设置应用程序池和虚拟目录(是手动创建还是使用某些工具创建)?
当静态资源发生变化(CSS,JS或图像文件)时,您是重新部署整个应用程序还是只重新部署修改后的资源?汇编/ ASPX页面何时更改?
您是否跟踪给定应用程序的所有已部署版本?如果出现问题,您是否有将应用程序恢复到之前已知工作状态的过程?
随意填写上一个清单。
以下是我们用于部署ASP.NET应用程序的内容:
答案 0 :(得分:24)
我们使用Setup Factory在MSI中部署了所有代码。如果必须改变某些事情,我们会重新部署整个解决方案。对于css文件来说这听起来有些过分,但它绝对保持所有环境同步,我们确切地知道生产中的内容(我们以相同的方式部署到所有测试和uat环境)。
答案 1 :(得分:19)
我们对实时服务器进行滚动部署,因此我们不使用安装程序项目;我们有更像CI的东西:
robocopy会自动确保只部署更改。
重新使用App Pool等;我会喜欢这是自动化的(see this question),但在时刻它是手动的。不过,我真的想改变它。
(这可能有助于我们拥有自己的数据中心和服务器场“现场”,因此我们不必跨越许多障碍)
答案 2 :(得分: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。
答案 3 :(得分:5)
我主要将ASP.NET应用程序部署到Linux服务器,并重新部署所有内容,即使是最小的更改。这是我的标准工作流程:
使用命令行版本的Subversion完成Checkout,并使用xbuild完成构建(msbuild与Mono项目类似)。大多数魔法都是在ReleaseIt中完成的。
在我的开发服务器上,我基本上有持续集成,但在生产方面,我实际上是SSH到服务器并通过运行脚本手动启动部署。我的脚本被巧妙地称为“部署”,这就是我在bash提示符下键入的内容。我很有创意。不
在生产中,我必须两次输入'deploy':一次签出,构建和部署到一个过时的目录,一次将该目录作为默认实例。由于目录已过时,我只需在相关目录中输入“deploy”即可恢复到以前的任何部署。
初始部署需要几分钟时间,并且恢复到先前版本需要几秒钟。
对我来说这是一个很好的解决方案,只依赖于三个命令行实用程序(svn,xbuild和releaseit),数据库客户端,SSH和Bash。
我确实需要在CodePlex上更新ReleaseIt的副本:
答案 4 :(得分:4)
ASP.NET的简单XCopy。拉上它,sftp到服务器,提取到正确的位置。对于第一次部署,手动设置IIS
答案 5 :(得分:4)
回答你的问题:
保持美好而简单至今为我们带来了很多麻烦。
答案 6 :(得分:4)
您使用的是某些特定工具还是只使用XCOPY?如何打包应用程序(ZIP,MSI,...)?
作为BuildMaster的开发人员,这自然是我使用的。所有应用程序都在工具中构建和打包为工件,这些工件在内部存储为ZIP文件。
首次部署应用程序时,如何设置应用程序池和虚拟目录(是手动创建还是使用某些工具创建)?
手动 - 我们在工具中创建一个更改控件,提醒我们在应用程序在其测试环境中移动时在未来环境中执行的确切步骤。这也可以通过简单的PowerShell脚本实现自动化,但我们不会经常添加新的应用程序,因此花费1分钟手动创建站点也同样容易。
当静态资源发生变化(CSS,JS或图像文件)时,您是重新部署整个应用程序还是只重新部署修改后的资源?汇编/ ASPX页面何时更改?
默认情况下,设置部署工件的过程,以便只将已修改的文件传输到目标服务器 - 这包括CSS文件,JavaScript文件,ASPX页面和链接程序集中的所有内容。
您是否跟踪给定应用程序的所有已部署版本?如果出现问题,您是否有将应用程序还原到先前已知工作状态的过程?
是的,BuildMaster为我们处理所有这些。恢复大多与重新执行旧的构建升级一样简单,但有时需要手动恢复数据库更改,并且可能发生数据丢失。基本回滚过程详见:http://inedo.com/support/tutorials/performing-a-deployment-rollback-with-buildmaster
答案 7 :(得分:3)
网络设置/安装项目 - 如果出现问题,您可以轻松卸载
答案 8 :(得分:3)
Unfold 是我为.net应用程序编写的类似capistrano的部署解决方案。这是我们在所有项目中使用的,它是一个非常灵活的解决方案。它解决了.net应用程序的大多数典型问题,如Rob Conery在this blog post中所述。
这是introduction和其他一些博文。
所以回答上面的问题:
如何打包应用程序(ZIP,MSI,...)?
Git(或其他scm)是在目标计算机上获取应用程序的默认方式。或者,您可以执行本地构建并通过Powereshell远程连接
首次部署应用程序时,如何设置应用程序池和虚拟目录(您是手动创建还是使用某些工具创建它们)?
Unfold使用Powershell的WebAdministration模块配置应用程序池和网站应用程序。它允许我们(和您)修改应用程序池或网站的任何方面
当静态资源发生变化(CSS,JS或图像文件)时,您是重新部署整个应用程序还是只重新部署修改后的资源?程序集/ ASPX页面何时更改?
是展开这样做,任何部署都安装在其他部署旁边。这样我们就可以轻松回滚 什么时候出错了。它还允许我们轻松追溯已部署的版本 源代码控制修订版。
您是否跟踪给定应用程序的所有已部署版本?
是的,展开会保留旧版本。不是所有版本,而是许多版本。它使回滚几乎无足轻重。
答案 9 :(得分:3)
过去一年我们一直在改进我们的发布流程,现在我们已经对它进行了改进。我使用Jenkins管理所有自动构建和发布,但我确定您可以使用TeamCity或CruiseControl。
因此,在签到时,我们的#34;正常" build执行以下操作:
<MvcBuildViews>true</MvcBuildViews>
来编译视图时,msbuild随机崩溃,所以我不得不禁用它)如果有人点击&#34;部署到UAT&#34;:
点击&#34; Deploy to Prod&#34;:
所有完整的制作到制作需要大约30秒,我非常非常满意。
此解决方案的好处:
此解决方案的主要缺点是:
我希望听到任何其他可能的改进!
答案 10 :(得分:2)
早在2009年,这个答案来自于此,我们使用CruiseControl.net进行持续集成构建,同时也输出了Release Media。
从那里我们使用Smart Sync software来比较负载平衡池之外的生产服务器,并将更改移出。
最后,在验证发布后,我们运行了一个DOS脚本,主要使用RoboCopy将代码同步到实时服务器,停止/启动IIS。
答案 11 :(得分:1)
在我工作的最后一家公司,我们曾经使用rSync批处理文件进行部署,仅上传自上次上传以来的更改。 rSync的优点在于您可以添加排除列表以排除特定文件或文件名模式。因此,排除所有.cs文件,解决方案和项目文件非常简单,例如。
我们使用TortoiseSVN进行版本控制,因此很高兴能够编写几个SVN命令来完成以下任务:
除此之外,还有第二个批处理文件,它只检查实时服务器上的文件差异。这可以突出显示有人上传但未将其更改提交到SVN的常见问题。结合上面提到的同步日志,我们可以找出可能是罪魁祸首的人,并要求他们投入工作。
最后,rSync允许您备份上传期间替换的文件。我们将它们移动到备份文件夹中如果您突然意识到某些文件不应该被覆盖,您可以找到该文件夹中每个文件的最后一个备份版本。
虽然当我在上传方法不那么优雅或简单(远程桌面,复制和粘贴整个网站)的环境中工作时,我的解决方案感觉有点笨拙,但后来我更加欣赏它了。例如)。