2010-04-27 57 views
3

好吧,這就是事情。如何避免混亂的ASP.NET Web應用程序部署?

我正在開發一個現有的(它開始是一個ASP經典應用程序,所以你可以想象:P)ASP.NET 4.0和SQLServer 2005下的Web應用程序。我們有4個開發人員使用本地SQL Server 2005 Express實例,具有源代碼和Visual Studio數據庫項目

此web應用程序有幾個「Universe」(我們稱之爲)。每個Universe都有自己的數據庫(當前位於同一臺服務器上),但它們都共享相同的模式(表,sprocs等)和相同的源代碼/站點代碼。

所以手動部署真的很煩人,因爲我必須部署源代碼,然後在每個數據庫上手動運行sql腳本。我知道手動部署會導致問題,所以我正在尋找一種自動化的方法。

我們最近創建了一個Visual Studio數據庫項目來管理模式並生成具有不同目標的差異模式腳本。

我不知道如何把碎片一起

我想:

  1. 有辦法做一個「同步」部署到目標服務器(幸運的是我有完整的RDC訪問服務器,所以我可以根據需要安裝東西)。對於「同步」部署,我的意思是我不想完全部署整個應用程序,因爲它有很多文件,我只想部署這些新的或已更改的文件。
  2. 爲每個數據庫目標生成diff-sql更新腳本,並將其組合爲1個腳本。爲此,我應該在某處列出一些數據庫名稱。
  3. 複製站點文件並以簡單和自動的方式執行生成的sql腳本。

我讀過關於MSBuild,MS WebDeploy,NAnt等等。但我不知道從哪裏開始,我真的想擺脫這種手動部署。

如果有比我列舉的更好更簡單的方法,我會很樂意閱讀您的選項。

我知道這不是一個非常具體的問題,但我已經搜索了很多關於它,似乎我無法弄清楚如何做到這一點。我從未使用任何自動化工具進行部署。

任何幫助將是非常讚賞,

謝謝大家,

問候

回答

1

你有沒有聽說過這個詞多租戶?看看是否適用於你的「Multiverse」,特別是如果一個宇宙從未被另一個宇宙訪問過,值得一看。

參見:

http://en.wikipedia.org/wiki/Multitenancy

http://msdn.microsoft.com/en-us/library/aa479086.aspx

UPDATE:

如果應用程序和數據庫是爲每個客戶端(或承租人)我相信同樣存在這樣的應用可能幫助提供與SaaS應用程序相同的代碼/數據庫?即頂部可以處理部署的另一個應用程序/配置層等?

我認爲,這些被稱爲平臺即服務(PaaS)應用:

見:http://en.wikipedia.org/wiki/Platform_as_a_service

多租戶,你的情況是可能的,這取決於客戶端的安全性要求,一些工作(或大量的工作):

選項1:

你可以使用一個實例的應用程序,即一旦部署站點並連接到不同的數據庫爲每個客戶端。您需要通過URL來區分每個客戶端內容/數據隔離BYT設置連接字符串爲每個等等(這將減少你的站點部署到一個部署)

選項2:

你可以同時創建應用程序的單個實例並使用單個數據庫。您需要爲每個表添加「TenantID」,並調整所有代碼以接受TenantID以確保數據安全性/隔離性。同樣,您需要根據URL檢測/區分Tenant以設置用於每次數據庫調用的會話的TenantID。 (這會減少您的網站和數據庫部署到每個之一)

+0

從來沒有聽說過它,但它似乎我有。每個「宇宙」是完全孤立的,彼此之間沒有互動。無論如何,這些鏈接都非常合理,以及如何建立多租戶結構。我已經有了結構,我只需要一個自動部署的方式。謝謝anwyay。 – emzero 2010-04-28 00:48:26

+0

好吧,實際上我們有一個類似於選項1的結構。由於策略的原因,我們需要每個客戶端都有一個獨立的數據庫,因爲他們不想與其他客戶端共享同一個數據庫。但是我的問題更具體到應用程序代碼和數據庫腳本的自動部署過程。如何將所有內容統一到自動化過程中。 – emzero 2010-04-28 06:38:59