Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 使用Robocopy部署站点_Asp.net_Deployment_Windows Server 2003_Robocopy - Fatal编程技术网

Asp.net 使用Robocopy部署站点

Asp.net 使用Robocopy部署站点,asp.net,deployment,windows-server-2003,robocopy,Asp.net,Deployment,Windows Server 2003,Robocopy,我希望能够快速地将更新部署到相当繁忙的站点。对于较小的站点,我只需将新文件FTP到旧文件上。然而,这一个有几个大型dll,它们会定期更新,当它们复制站点时,站点会有效地关闭(另外,如果出现问题,还需要备份它们) 我的计划是使用TortoiseHg通过FTP(使用netdrive或类似工具)与服务器上的暂存副本同步。然后,我可以检查所有操作是否正常运行,一旦完成,我希望运行一个.bat文件(或其他文件),以创建实时站点的备份(最好只修改即将更改的文件,但这并不重要),然后将新更改的文件复制到实时站

我希望能够快速地将更新部署到相当繁忙的站点。对于较小的站点,我只需将新文件FTP到旧文件上。然而,这一个有几个大型dll,它们会定期更新,当它们复制站点时,站点会有效地关闭(另外,如果出现问题,还需要备份它们)

我的计划是使用TortoiseHg通过FTP(使用netdrive或类似工具)与服务器上的暂存副本同步。然后,我可以检查所有操作是否正常运行,一旦完成,我希望运行一个.bat文件(或其他文件),以创建实时站点的备份(最好只修改即将更改的文件,但这并不重要),然后将新更改的文件复制到实时站点

如果可能的话,我也想让副本忽略某些目录(如用户上传),这样它就不会覆盖实时站点上的那些文件了

我听说RoboCopy是一个不错的选择,但我不确定从哪里开始。我是否需要调用两个命令(一个用于初始备份,一个用于副本)?如果出现问题,有没有办法将live站点恢复到以前的状态

该网站位于ASP.NET中,将被复制到Windows 2003 server


编辑:当web.config项发生更改并且需要合并以便临时服务器设置(appsettings、连接字符串等)时,这会变得有点棘手不要部署到实时站点。这是如何处理的?

在基于Nix的服务器上,我会使用RSYNC,我知道在Windows上,您可以使用哪个端口的RSYNC,并且是开源的(从未使用过DeltaCopy,因此请仔细检查)无论如何,假设它像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。这是在登台服务器上对站点进行冒烟测试后完成的


这对解决配置问题没有多大帮助,但我们的暂存和生产配置文件是相同的

机器人技术是一项硬性要求吗?为什么不使用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)" />

$([System.IO.Path]::GetTempFileName())
$([System.IO.Path]::GetTempFileName())



我们使用的是以下内容

  • 首先使用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是eXclude目录)来部署网站

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

  • 复制并重命名(这次使用xcopy)一个包含正确信息的release.config到d:\Website\web.config(事实上,这就是我们过去的做法,现在我们有了一个自制的转换引擎来动态更改dev web.config的部分内容)

  • 重新启动网站
  • (可选)删除在第二步创建的存档
在您的情况下,您必须为任何要忽略的目录添加/XD标志,例如用户的上载。除非生产web.config文件很复杂,否则我真的建议您只需复制一个作为项目一部分维护的release.config,与web.config并排,您需要(我也需要)的是一个同步程序,能够在服务器上创建文件备份,并通过ftp快速复制这些文件,方法可能是先将它们复制到临时目录中,或者进行部分更新


这是我发现的一个程序:

WebDeploy是处理部署的一种更好的方法(参见Scott H)

但是,Robocopy是一个非常好的低成本部署工具,我仍然在一些站点上使用它(还没有时间将它们更改为webdeploy)。Robocopy与xcopy类似,但具有更丰富的选项集。因此,您需要2个Robocopy命令(1个用于备份,1个用于部署)。我通常在文件暂存时执行备份命令


管理配置文件总是很棘手(这也是使用webdeploy的一个重要原因)。一种方法是将每个环境的配置文件副本签入源代码管理(例如web.dev.config、web.uat.config、web.prod.config等)。登台(或部署脚本)将获取并重命名必要的配置文件。

您可能需要使用多种工具的组合

我想看看
<!-- 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')"  />