WebDeploy回滚部分备份

时间:2016-11-22 14:45:54

标签: webdeploy microsoft-web-deploy

我正在使用WebDeploy,并且遇到了一个我似乎无法解决的问题。首先,我将概述我的想法,然后进入我遇到的问题。

目前,我们在IIS的网站根目录下运行了许多应用程序。我们希望能够在应用程序级别而不是网站级别上推出和回滚。

当我们想要推出一个应用程序时,用户将在IIS中创建一个webdeploy包。然后,他们将使用Web Deploy将其推出。目前,当WebDeploy推出应用程序时,它需要备份整个网站(许多应用程序)以防我们需要回滚。这适用于部署,但回滚是我遇到问题的地方。请参阅回滚,我不想回滚整个网站。我只想推出在推出期间发生了哪些变化。这对于避免踩到可能正在进行的其他部署的脚趾很重要。

为了满足这个要求,我编写了基本上将初始rollout包扩展到备份包的代码。如果文件存在于初始卷展栏包中,我们会在备份包中获取相应的文件。一旦我们从备份中获得了与初始部署相对应的所有文件,我就从备份中复制systeminfo.xml,parameters.xml和archive.xml,并使用所有这些文件创建一个新的zip文件,我将其称为回滚包。现在,rollback包具有与备份包完全相同的文件夹结构,它只是缺少备份中未在初始卷展栏中替换的文件。我遇到的问题是,当我将这个新的回滚包发送到web deploy api时,我没有收到任何错误消息,但是webserver上的文件没有被回滚文件替换。经过进一步调查,我发现web部署api返回一个DeploymentChangeSummary对象。此对象显示复制的字节,替换文件等的所有零(基本上没有替换,但Web部署显示没有错误)。当我通过相同的代码传递整个备份文件时,Web服务器上的文件将被替换,而DeploymentChangeSummary将显示复制出的文件和字节。

为什么我可以推出网站的整个备份,但不是部分备份?我有一种感觉,这可能与将.xml文件从备份复制到卷展栏有关,因为它们可能需要修改,但我不确定。另外,我没有使用校验和。

1 个答案:

答案 0 :(得分:0)

我建议手动运行MSDeploy.exe命令以定位要包装的Web应用程序。如果您保留这些软件包的存档以及它们应用于目标服务器的时间,则回滚可以简单地重新运行最后一个软件包。

"c:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync -source:manifest="manifest.source.xml" -dest:package=websitepackage.zip

以下文章介绍了从命令行手动创建程序包的步骤。在这种情况下,它用于ASP.NET网站,但可以与任何ASP.NET站点/应用程序一起使用:

http://www.dotnetcatch.com/2016/06/23/deploy-an-asp-net-website-not-web-application-with-msdeploy/