2016-11-22 59 views
0

我正在使用WebDeploy,遇到了一個我似乎無法解決的問題。首先,我將概述我的想法,然後討論我遇到的問題。WebDeploy回滾部分備份

目前,我們有很多應用程序在IIS的網站的根目錄下運行。我們希望能夠在應用程序級別而不是網站級別上展開和回滾。

當我們想要推出一個應用程序時,用戶將在IIS中創建一個webdeploy包。然後他們將使用Web Deploy進行推廣。目前,當WebDeploy推出應用程序時,需要備份整個網站(許多應用程序)以防需要回滾。這對於部署很有效,但回滾是我遇到問題的地方。看到,在回滾中,我不想回滾整個網站。我只想推出在此推出期間發生的變化。這對避免踩踏可能正在進行的其他部署的腳趾很重要。

爲了滿足這個要求,我編寫了代碼,使初始部署包與備份包實質上不同。如果該文件出現在初始發佈包中,我們會抓取備份包中的相應文件。一旦我們從備份中獲得與初始轉出相對應的所有文件,我複製備份中的systeminfo.xml,parameters.xml和archive.xml文件,並使用所有這些文件創建一個新的zip文件,我將其稱爲回滾軟件包。現在,回滾軟件包與備份軟件包具有完全相同的文件夾結構,它只是簡單地丟失了備份中未在初始卷展欄中替換的文件。我遇到的問題是,當我將這個新的回滾包發送到Web部署API時,我沒有收到任何錯誤消息,但Web服務器上的文件未被回滾文件取代。經過進一步調查,我發現web部署API會返回一個DeploymentChangeSummary對象。該對象顯示覆制字節,文件替換等所有零(基本上沒有被替換,但web部署顯示沒有錯誤)。當我通過相同的代碼傳遞整個備份文件時,Web服務器上的文件將被替換,而DeploymentChangeSummary會顯示覆製出來的文件和字節。

爲什麼我可以展開網站的整個備份,但不是部分備份?我有一種感覺,這可能與將.xml文件從備份複製到卷展欄有關,因爲它們可能需要修改,但我不確定。另外,我沒有使用校驗和。

回答

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/