我正在嘗試爲我們的一些ASP.NET應用程序設置部署鏈。首選的工具是Web Deploy(msdeploy) - 目前。不幸的是我被困在一個問題上。如何使用web部署(msdeploy)升級(合併)web.config?
鏈的高級概述是這樣的:
- 的Web開發者創建在SVN的代碼,並檢查它;
- Buildserver看到更新並構建網站的msdeploy .zip包;
- .zip包會自動放入我們的安裝程序併發送給各種客戶端;
- 客戶端在其服務器上運行安裝程序(-s);
- 安裝程序在內部使用msdeploy來部署.zip軟件包並創建新網站或升級現有網站。
Msdeploy可以很容易地部署一個新的實例,但我很難理解如何執行「升級」安裝。主要問題是web.config文件。每個客戶肯定會在那裏進行一些定製以適合他們的特定環境。安裝程序本身提供了在首次安裝時設置一些更重要的參數(由msdeploy的參數機制實現),但它們可以手動完成其他操作。另一方面,我們的開發者偶爾會對web.config進行更改,添加一些新設置或刪除過時的設置。所以我不能只告訴msdeploy完全忽略這個文件。我需要某種先進的XML修改機制。它可能是開發者維護的腳本,但它只需要在升級時運行,而不是新安裝。
我不知道如何做到這一點。
除此之外,有時還有一些完全奇怪的升級邏輯。例如,應用程序隨附我們的公司徽標,但有些客戶已替換該.png文件以顯示其自己的徽標。最近我們需要更新徽標 - 但只適用於那些沒有用自己的徽標取代它的客戶。
同樣,可能有一些緩存文件夾可能需要在某些升級時清理,而在其他升級時則不需要。或者用戶內容可能未觸及的文件夾(但在初始安裝時會附帶默認內容)。等等
您通常如何實現msdeploy包的這種雙重行爲?我真的需要爲每個應用程序創建2個不同的包嗎?
我打算搬到這個模型,是的,但即使這樣,將需要某種形式的升級腳本的。問題是 - 我如何在msdeploy中獲得升級腳本?我不明白我如何才能讓它運行腳本,當且僅當它是升級。 –
+1用於隔離定製,這是處理事情的一種非常乾淨的方式。您甚至可以比這裏描述的更進一步:不是將您的客戶文件放在頂層安裝文件夾中,而是將它們放置在_outside_並且只有一個配置設置(客戶可以在安裝期間在參數文件中指定/升級)這個位置。檢查_「當且僅當它是升級」_然後就像檢查該文件夾是否存在一樣簡單(或者例如如果該文件夾內存在version.txt)。你的前/後腳本可以根據需要處理這些文件。 – Nailuj