2011-01-27 51 views
1

我正在使用NAnt構建ASP.NET MVC項目。使用NAnt打包,如何處理不同的環境

的惡性腳本,然後創建一個壓縮包,包含部署腳本和所有必要的文件。

部署腳本備份當前運行的網站,建立網站的更新版本,並更新數據庫。

這適用於單一環境。

然而,我們要求越來越設立一個臨時/受理環境旁邊的生產。這些環境,當然,在不同的文件結構,數據庫服務器,配置設置等

我怎樣才能最好在部署腳本處理呢?我不想爲每個環境創建單獨的變量,只能通過名稱來區分。

提供默認值並在單獨的文件中提供變量似乎更符合邏輯。

有沒有人有這方面的實際經驗?

回答

1

存儲您認爲可能會在配置文件中的環境之間更改的內容。

如果你喜歡,Visual Studio可以在這裏做繁重的工作;您可以創建設置並從Visual Studio項目的屬性的「設置」選項卡中指定默認值。

這將創建一個配置文件給你,並通過Properties.Settings.Default提供強類型的訪問。

至於通過構建處理多個環境,我見過一些人建議維護配置文件的多個副本 - 例如每個環境一個 - 另外一些人建議在構建或部署過程中使用nant來修改配置文件相。您可以使用在命令行上傳遞給nant的屬性(例如)來選擇要構建的環境(或部署,具體取決於您如何執行此操作)。

我不建議這兩種方法的原因是:

  1. 它們都需要改變你的構建,以支持新的環境。
  2. 如果您更改了部署環境中的設置並忘記更新構建,那麼下一個部署將重置該更改(某種程度上破壞了配置設置點)。
  3. 如果有人創建了一個新的環境(可以說,他們想探索從升級到SQL Server例如新版本中出現的問題),不花哨創造出構建系統中的所有新的配置文件,他們可能會決定只使用現有環境的設置。假設他們選擇使用實時設置進行部署,並忘記隨後更改某些內容。你的新「測試」環境現在可以指向現場套件。

我創建了每個配置文件(例如web.config.example)的副本並註釋掉它們中的設置(除非它們具有有意義的默認值)。我檢查了這些,並且部署了而不是真正的web.config(也就是說,web.config不會自動部署,web.config.example部署爲web.config.example。

新環境的管理員必須將文件複製並重命名爲web.config並提供有意義的值)。我還將所有調用置於自己的包裝類後面 - 如果缺少強制設置,則會引發異常。

構建和我的環境不再相互依賴 - 一個構建可以部署到任何環境。

如果缺少一個設置(新環境或現有環境中的新設置),那麼您會得到一個很好的清除異常,以告訴管理員要執行的操作。

升級後,現有設置不會更改,因爲只更新了.example文件。這是一項管理任務,可將當前設置與最新示例進行比較,並在必要時進行修改。

要配置部署,可以將所有環境設置(安裝路徑等)放入nant屬性中,並將它們移動到單獨的文件中(例如settings.build),然後使用nant include任務將該文件包含在部署文件的頂部(例如deploy.build)。然後,您可以部署新版本的deploy.build,而無需像settings.build中那樣覆蓋配置更改。如果在deploy.build中引入新屬性,nant將失敗並顯示一條好消息,告訴您尚未設置該屬性。

+0

嗨,謝謝你的回答。這已經是我們已經做的很大一部分,非常相似。但我真正想知道的是如何處理環境部署差異。例如:安裝較新版本的Web應用程序之前,舊應用程序的備份目錄。 – Bertvan 2011-01-27 12:28:04