【发布时间】:2016-11-22 14:45:53
【问题描述】:
我正在使用 WebDeploy,但遇到了一个我似乎无法解决的问题。首先,我将概述我的想法,然后进入我遇到的问题。
目前,我们在 IIS 中的网站根目录下运行着许多应用程序。我们希望能够在应用程序级别而不是网站级别上推出和回滚。
当我们想要推出一个应用程序时,用户将在 IIS 中创建一个 webdeploy 包。然后,他们将使用 Web Deploy 推出此功能。目前,当 WebDeploy 推出一个应用程序时,它会备份整个网站(许多应用程序),以防我们需要回滚。这适用于推出,但回滚是我遇到问题的地方。看,在回滚时,我不想回滚整个网站。我只想推出在此推出期间发生的变化。这对于避免踩到可能正在进行的其他部署的脚趾很重要。
为了满足这个要求,我编写了基本上将初始推出包与备份包进行区分的代码。如果该文件存在于初始推出包中,我们会在备份包中获取相应的文件。一旦我们从备份中获得了与初始部署相对应的所有文件,我从备份中复制 systeminfo.xml、parameters.xml 和 archive.xml 并使用所有这些文件创建一个新的 zip 文件,我将其称为回滚包。现在,回滚包具有与备份包完全相同的文件夹结构,只是缺少备份中未在初始推出时替换的文件。我遇到的问题是,当我将这个新的回滚包发送到 web 部署 api 时,我没有收到任何错误消息,但是 web 服务器上的文件没有被回滚文件替换。经过进一步调查,我发现 web deploy api 返回一个 DeploymentChangeSummary 对象。此对象显示复制的字节、替换的文件等全为零(基本上没有替换任何内容,但 web 部署显示没有错误)。当我通过相同的代码传递整个备份文件时,Web 服务器上的文件将被替换,并且 DeploymentChangeSummary 显示复制的文件和字节。
为什么我可以推出网站的整个备份,而不是部分备份?我觉得这可能与将 .xml 文件从备份复制到推出有关,因为它们可能需要修改,但我不确定。另外,我没有使用校验和。
【问题讨论】:
标签: webdeploy microsoft-web-deploy