我希望能够将更新快速部署到相当忙碌的站点。对于较小的站点,我只会在旧文件上ftp。但是,这个有几个大的DLL会定期更新,并且在复制网站时有效地降低了(此外,还有一些备份的麻烦,以防万一出现问题。

我的计划是使用Tortoisehg通过FTP上的服务器上的登台副本(使用NetDrive或类似的内容)同步。然后,我可以检查所有操作顺利运行,一旦完成,我想运行一个.bat文件(或其他),该文件将创建实时站点的备份(最好只有即将更改的文件,但这就是不关键),然后将新更改的文件复制到实时站点。

如果可能的话,我还想让副本忽略某些目录(例如用户上传),以免在实时站点上覆盖这些文件吗?

我听说Robocopy是必经之路,但我不确定从哪里开始。我需要调用2个命令(初始备份1个命令,一个用于副本)?是否有任何方法可以将实时网站恢复到以前的状态?

该站点位于ASP.NET中,并将复制到Windows 2003服务器。

编辑:当Web.config项目发生更改并需要合并时,它会变得有些棘手,以便登台服务器设置(AppSettings,Connection Strings等)不会被部署到实时站点。如何处理?

有帮助吗?

解决方案

我们使用的是以下

  • 首先在CruiseControl.net中使用MSBUILD构建网站以构建二进制文件
  • 将当前部署的文件放在时间戳文件夹下,以避免丢失数据

    C:\DevTools\Robocopy\robocopy.exe /R:1 /W:10 /mir "D:\WebSite\Files" "D:\Webarchive\ArchivedFiles\Documents.%date:~0,-8%.%date:~3,-5%.%date:~6%.%time:~0,-9%.%time:~3,-6%.%time:~6,-3%" /XF *.scc

  • 停止网站

  • 通过复制除了我们存档的文件(/XD为“排除目录)之外的所有内容”来部署网站

    C:\DevTools\Robocopy\robocopy.exe /R:1 /W:10 /mir "c:\dev\site" "D:\WebSite" /XF *.scc /XD "D:\WebSite\Files"

  • 复制并重命名(这次使用Xcopy,带有Xcopy)。Config,其中包含正确信息到D: weblite web.config(实际上,这就是我们过去所做的,现在我们有一个自制转换引擎来更改开发的部分web.config即时)。

  • 重新启动网站
  • (可选)删除您在第二步中制作的档案

在您的情况下,您必须为要忽略的任何目录(例如用户的上传)添加 /XD标志。而且,除非production web.config文件很复杂,否则我真的建议您简单地复制一个版本。

其他提示

Robocopy是很难的吗?为什么不使用MSBUILD?您列出的所有内容都可以在MSBUILD中无痛地完成。

<!-- Attempt to build new code -->
<MSBuild Projects="$(BuildRootPath)\ThePhotoProject.sln" Properties="Configuration=$(Environment);WebProjectOutputDir=$(OutputFolder);OutDir=$(WebProjectOutputDir)\" />

<!-- Get temp file references -->
<PropertyGroup>
  <TempConfigFile>$([System.IO.Path]::GetTempFileName())</TempConfigFile>
  <TempEnvironmentFile>$([System.IO.Path]::GetTempFileName())</TempEnvironmentFile>
</PropertyGroup>

<!-- Copy current web configs to temp files -->
<Copy SourceFiles="$(OutputFolder)\web.config" DestinationFiles="$(TempConfigFile)"></Copy>
<Copy SourceFiles="$(OutputFolder)\web.$(Environment).config" DestinationFiles="$(TempEnvironmentFile)"></Copy>
<ItemGroup>
  <DeleteConfigs Include="$(OutputFolder)\*.config" />
</ItemGroup>

<Delete Files="@(DeleteConfigs)" />

...

<!-- Copy app_offline file -->
<Copy SourceFiles="$(CCNetWorkingDirectory)\Builder\app_offline.htm"  DestinationFiles="$(DeployPath)\app_offline.htm"  Condition="Exists('$(CCNetWorkingDirectory)\Builder\app_offline.htm')"  />

<ItemGroup>
  <DeleteExisting Include="$(DeployPath)\**\*.*" Exclude="$(DeployPath)\app_offline.htm" />      
</ItemGroup>

<!-- Delete Existing files from site -->
<Delete Files="@(DeleteExisting)"  />
<ItemGroup>
  <DeployFiles Include="$(OutputFolder)\**\*.*" />
</ItemGroup>

<!-- Deploy new files to deployment folder. -->
<Copy SourceFiles="@(DeployFiles)"  DestinationFiles="@(DeployFiles->'$(DeployPath)\%(RecursiveDir)%(Filename)%(Extension)')"  />

<!-- Delete app_offline file -->
<Delete Files="$(DeployPath)\app_offline.htm" Condition="Exists('$(DeployPath)\app_offline.htm')"  />

在基于NIX的服务器上,我将使用rsync,我知道您可以在Windows上使用 三角形 rsync的哪个端口是开源源(从未使用过三角拷贝,所以请仔细检查它)。

您可以使用各种配置选项删除已在源上删除的目标上的文件,还可以使用将排除文件或目录的文件中的添加文件,即本地配置,您不想复制。等等

您应该能够将其全部折叠成一个脚本以在需要时运行,这意味着您可以测试和时间,以便知道发生了什么。

查看这些链接以查看它们是否有帮助:

你会发现 robocopy.exe /? 非常有帮助。特别是您想要 /XF 切换以排除文件,并 /XD 用于排除文件夹。

您需要编写一个脚本(例如BAT,PowerShell,CScript)来处理Web.config问题。

Microsoft本身使用Robocopy将更新部署到某些站点。

我不知道您是否有多个服务器,但是我们的部署脚本类似于:1)停止IIS(将服务器从负载范围内旋转,2)Robocopy /mir来自 staging path to webroot web ## path to webroot其中##是服务器的数字,3)启动IIS。这是在登台服务器上进行烟雾测试后完成的。

这对您的配置问题无济于事,但是我们的分期和生产配置文件是相同的。

您需要的(我需要)是 同步程序 具有能力 创建备份 服务器上的文件,然后 快速复制FTP 可能首先在临时目录或部分更新中复制文件的文件。

这是我发现的一个程序: http://www.superflexible.com/ftp.htm

WebDeploy是处理部署的更好方法(请参阅Scott H http://www.hanselman.com/blog/webdeploymentmadeawesomeiforyouresifore xcopyyouredoingitwrong.aspx)

但是,Robocopy是我仍然在某些网站上使用的出色的低成本部署工具(还没有时间将其更改为WebDeploy)。 Robocopy就像Xcopy一样,但具有更丰富的选择。因此,您将需要2个Robocopy命令(1个用于备份,1个用于部署)。上演文件时,我通常会执行备份命令。

管理配置文件总是很棘手(也是使用WebDeploy的重要原因)。一种方法是保留每个环境中的配置文件的副本,请访问您的源控件(例如,web.dev.config,web.uat.config,web.prod.config等)。登台(或部署脚本)将抓取并重命名必要的配置文件。

您可能需要使用多种工具。

我会在您的实时站点上查看带有只读文件夹的DFSR(文件服务器角色)(因此是单向复制)。

它非常容易配置,具有不错的GUI,可以根据位置和/或掩码排除文件的能力,并且启用了音量阴影副本,您可以在设置的时间表上运行它,并更新仅更改的文件(或拥有它)按计划运行,甚至手动运行)。它的美丽是一旦配置了,您就不必再次触摸它。

一旦获得大部分文件复制,您就可以在Web.config上自动化可能合并的帮助,假设您想要自动化。

MSBUILD很棒,除了一个未成年人(或主要取决于您的观点)缺陷。每次您运行构建时,它都会重建二进制文件。这意味着,对于从测试到生产或阶段到生产的部署(或任何您所谓的预生产环境),如果您使用MSBUILD,则您不会将现有的二进制文件从一个环境推广到下一个环境,您正在重新构建它们。这也意味着您可以肯定地依靠源代码存储库中没有任何变化,因为您对预生产环境进行了MSBUILD。甚至允许更改任何事物(主要或次要)的机会,这意味着您不会将经过全面测试的产品推广到生产环境中。在我工作的地方,这不是可接受的风险。

输入机器人。使用Robocopy,您将(希望)完全测试的产品复制到生产环境中。然后,您要么需要手动修改Web.config/app.config以反映生产环境,要么使用转换工具来做到这一点。我一直在使用SourceForge上使用的“配置转换工具”来实现此目的 - 它就像MSBuild Web/app.config转换一样工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top