企業 Web 部署:案例概觀
演講者:Jason Lee
這組教學課程使用一個具有現實複雜度的範例解決方案,以及一個虛構的企業部署場景,以提供參考實現,並使任務和步驟有共同的背景。 本主題描述教學課程場景並介紹範例解決方案。
案例描述
Fabrikam, Inc. 是一家虛構的公司,它正在建立一種解決方案,讓遠端銷售團隊可以從 Web 介面儲存和檢索聯絡資訊。
Fabrikam, Inc. 的應用程式生命週期管理 (ALM) 流程要求在軟體開發流程的各個階段將解決方案部署到三個伺服器環境:
- 開發人員測試或「沙箱」環境。
- 以內部網路為基礎的預備環境。
- 面向互聯網的生產環境。
每個環境都有不同的設定和安全要求,每個環境都帶來獨特的部署挑戰。
Fabrikam, Inc. 伺服器基礎結構
這是 Fabrikam, Inc. 的進階開發和部署基礎結構。
開發人員工作站、原始碼控制基礎結構、開發人員測試環境和預備環境都駐留在 Fabrikam.net 網域內的 Intranet 網路上。 生產環境駐留在外圍網路 (也稱為 DMZ、非軍事區和屏蔽子網路) 上,該網路透過防火牆與 Intranet 網路隔離。 這是一種常見的部署方案:您通常會透過使用防火牆或閘道伺服器,將面向網際網路的 Web 伺服器與內部伺服器基礎架構隔離。
在此範例中:
- 具有單獨建置伺服器的 Team Foundation Server (TFS) 2010 伺服器提供原始碼控制和持續整合 (CI) 功能。
- 開發人員測試環境包括Internet Information Services (IIS) 7.5 Web 伺服器和SQL Server 2008 R2 資料庫伺服器。
- 生產環境包括由 Web Farm Framework (WFF) 控制器伺服器同步的多個 IIS 7.5 Web 伺服器以及 SQL Server 2008 R2 資料庫伺服器。 在實踐中,資料庫伺服器可以使用叢集或鏡像來提高可擴展性和可用性。
- 預備環境旨在盡可能複製生產環境的設定。
- 防火牆和網路隔離策略不允許從內部網路到週邊網路的直接、自動部署。
第二個教學課程「為 Web 部署設定伺服器環境」中更詳細地描述了每個環境的設定。
ALM 的團隊角色
這些使用者參與建立、管理、建置和發佈連絡人管理員解決方案:
Matt Hink 是 Fabrikam, Inc. 的網路應用程式開發人員。他是使用 Visual Studio 2010 開發連絡人管理員解決方案的團隊成員之一。 Matt 對開發人員測試環境中的伺服器擁有完全管理員權限,這使他可以設定環境以滿足他的需求。 他還具有對 Visual Studio 2010 TFS 執行個體的使用者存取權限,並在該執行個體中儲存了連絡人管理員解決方案的原始程式碼。
Rob Walters 是 Fabrikam, Inc. 開發團隊的伺服器管理員。 Rob 對 TFS 伺服器具有管理存取權限,以便他可以設定 TFS 和 Team Build 的各個方面。 Rob 還具有對測試和預備 Web 伺服器的管理存取權限,並擔任測試和預備環境中資料庫伺服器的資料庫管理員 (DBA)。 Rob 已在 TFS 伺服器上設定 Team Build 來執行下列任務:
- 每當使用者將檔案簽入 TFS 時,就在應用程式上建置並執行單元測試。 這就是所謂的 CI。
- 一旦應用程式通過單元測試,連絡人管理員應用程式就會自動部署到測試環境。 這包括在初始部署時將資料庫發佈到測試伺服器以及在初始部署後對資料庫的任何更新。
- 透過單步驟程序將連絡人管理員應用程式部署到預備環境。
- 建立 Web 套件,Web 伺服器管理員和 DBA 可以使用該套件將應用程式發佈到生產環境。
Lisa Andrews 是一名伺服器管理員,負責將應用程式部署到 Fabrikam, Inc. 生產伺服器。 一旦 TFS Team Build 建置了連絡人管理員應用程式,她就具有對 TFS Team Build 儲存 Web 部署包的共用的讀取存取權。 她還擁有對生產 Web 伺服器的管理存取權限,以便可以將應用程式部署到生產中。 此外,她還擔任 DBA,負責將資料庫和資料庫更新部署到生產環境中的資料庫伺服器。
連絡管理員解決方案
連絡人管理員解決方案旨在讓註冊、登入的使用者透過 Web 介面新增和編輯聯絡人資訊。 連絡人管理員解決方案由四個單獨的項目組成:
- ContactManager.Mvc。 這是一個 ASP.NET MVC3 Web 應用程式專案,代表解決方案的入口點。 它提供了一些基本的 Web 應用程式功能,例如為使用者提供建立和查看聯絡人詳細資訊的能力。 該應用程式依靠 Windows Communication Foundation (WCF) 服務來管理聯絡人,並依賴 ASP.NET 應用程式服務資料庫來管理身分驗證和授權。
- ContactManager.Database. 這是一個 Visual Studio 2010 資料庫專案。 此專案定義了儲存聯絡人詳細資訊的資料庫的架構。
- ContactManager.Service。 這是一個 WCF Web 服務專案。 WCF 公開一個端點,允許呼叫者對連絡人管理員資料庫執行建立、檢索、更新和刪除 (CRUD) 操作。 此服務依賴連絡人管理員資料庫和 ContactManager.Common.dll 組件。
- ContactManager.Common。 這是一個類別庫專案。 WCF 服務依賴於該程序集中定義的類型。
本系列的第一個教學課程「企業中的 Web 部署」提供了對此解決方案及其部署要求的完整回顧。
部署工作
將應用程式部署到大型組織中的不同環境涉及多項不同的任務。 這些是教學課程涵蓋的關鍵任務:
以下是從本文件前面所述的使用者角度來看的部署程序中每個步驟的清單:
- 團隊的所有成員都會在 Visual Studio 2010 中檢視連絡人管理員解決方案,以確定關鍵的部署需求和問題。
- Matt Hink 可以將連絡人管理員解決方案直接從開發人員工作站部署到開發人員測試環境,以對部署邏輯進行初步測試。
- Matt Hink 將應用程式新增至 TFS 中的原始碼管理。
- Rob Walters 在 Team Build 中為連絡人管理員解決方案建立了各種建置定義。 每當使用者簽入新程式碼時,一個建置定義都會使用 CI 將解決方案部署到開發人員測試環境。 另一個建置定義允許使用者根據需要觸發對預備環境的部署。
- 每次使用者簽入新程式碼時,Team Build 都會自動建置解決方案元件,執行單元測試,如果建置成功且單元測試通過,則將解決方案部署到開發人員測試環境。
- 當使用者觸發對預備環境的部署時,解決方案將在單步驟程序中封裝和部署。 此程序還會產生一個包,用於手動部署到生產環境。
- Lisa Andrews 透過手動匯入步驟 6 中建立的 Web 套件將應用程式部署到生產環境。
關鍵部署問題
The連絡人管理員solution and the Fabrikam, Inc. scenario highlight various common issues and challenges that you may encounter when you deploy complex, enterprise-scale solutions. 例如:
- 您需要能夠將專案部署到多個環境,例如開發人員或測試環境、預備平台和生產伺服器。 此解決方案需要針對每個環境使用不同的設定設定進行部署。
- 您需要同時部署多個依賴項目,作為單步驟或自動建置和部署流程的一部分。
- 您需要能夠透過自動化流程推動部署。 例如,您希望在簽入新程式碼時使用 CI 流程將 Web 應用程式部署到預備環境。
- 您需要能夠從 Visual Studio 外部控制部署流程並設定部署變量,因為開發人員不太可能擁有每個目標環境的正確配置設定或必要的憑證。
- 您需要部署基於模式的資料庫專案並在後續部署中保留現有資料。
- 您需要暫時部署成員資料庫,而不需要部署使用者帳戶資料。 您可能還需要更新已部署的成員資格資料庫的架構,而不遺失現有的使用者帳戶資料。
- 將內容部署到各種目標環境時,您需要排除某些檔案或資料夾。
此外,在更新頻繁且增量時管理部署會帶來一些額外的挑戰。 例如:
- 每次開發人員簽入新程式碼時,您都會執行單元測試。 您只想在程式碼通過單元測試時部署解決方案。
- 當您將 Web 應用程式部署到預備或生產環境時,您希望在部署過程期間將使用者重新導向至 app_offline.htm 檔案。
- 您想要記錄部署活動。 部署程序應向指定收件者傳送部署成功或失敗的電子郵件通知。
- 如果自動部署失敗,部署程序應重試目前部署或部署先前的 Web 套件。