Share via


應用程式生命週期管理:從開發到生產

作者 :Jason Lee

本主題說明虛構公司如何透過測試、預備和生產環境,透過測試、預備和生產環境,來管理部署 ASP.NET Web 應用程式的作業,作為持續開發程式的一部分。 在整個主題中,會提供連結,以取得有關如何執行特定工作的詳細資訊和逐步解說。

本主題旨在提供企業中一系列 Web 部署 教學課程 的高階概觀。 如果您不熟悉此處所述的一些概念,請不要擔心,下列教學課程提供所有這些工作和技術的詳細資訊。

注意

為了簡單起見,本主題不會討論在部署過程中更新資料庫。 不過,對資料庫功能進行累加式更新是許多企業部署案例的需求,您可以在本教學課程系列稍後找到如何完成此作業的指引。 如需詳細資訊,請參閱 部署資料庫專案

概觀

此處說明的部署程式是以 企業 Web 部署:案例概觀中所述的 Fabrikam, Inc. 部署案例為基礎。 您應該先閱讀案例概觀,再研究本主題。 基本上,案例會檢查組織如何透過一般企業環境中的各種階段,管理合理複雜 Web 應用程式的部署、 連絡人管理員解決方案

概括而言,連絡人管理員解決方案會在開發和部署程式中經歷這些階段:

  1. 開發人員會將一些程式碼簽入 Team Foundation Server (TFS) 2010。
  2. TFS 會建置程式碼,並執行與 Team 專案相關聯的任何單元測試。
  3. TFS 會將解決方案部署至測試環境。
  4. 開發人員小組會在測試環境中驗證並驗證解決方案。
  5. 預備環境管理員會對預備環境執行「假設」部署,以建立部署是否會造成任何問題。
  6. 預備環境管理員會對預備環境執行即時部署。
  7. 解決方案會在預備環境中進行使用者接受度測試。
  8. Web 部署套件會手動匯入至生產環境。

這些階段形成持續開發週期的一部分。

這些階段形成持續開發週期的一部分。

實際上,此程式稍微複雜一點,因為我們會更詳細地查看每個階段。 Fabrikam, Inc. 會針對每個目標環境使用不同的部署方法。

Fabrikam, Inc. 會針對每個目標環境使用不同的部署方法。

本主題的其餘部分會檢查此部署生命週期的這些主要階段:

  • 必要條件:在部署邏輯就緒之前,您需要如何設定伺服器基礎結構。
  • 初始開發和部署:第一次部署解決方案之前,您需要執行哪些動作。
  • 要測試的部署:如何在開發人員簽入新程式碼時,自動封裝內容並將其部署至測試環境。
  • 部署至預備環境:如何將特定組建部署到預備環境,以及如何執行「假設」部署,以確保部署不會造成任何問題。
  • 部署到生產環境:當網路基礎結構防止遠端部署時,如何將 Web 套件匯入生產環境。

必要條件

任何部署案例中的第一項工作是確保您的伺服器基礎結構符合部署工具和技術的需求。 在此情況下,Fabrikam, Inc. 已設定其伺服器基礎結構,如下所示:

初始開發和部署

在 Fabrikam, Inc. 開發小組第一次部署連絡人管理員解決方案之前,它必須先執行下列工作:

  • 在 TFS 中建立新的 Team 專案。
  • 建立包含部署邏輯Microsoft Build Engine (MSBuild) 專案檔。
  • 建立觸發部署程式的 TFS 組建定義。

建立新的 Team 專案

建立部署邏輯

Matt Hink 會使用 瞭解專案檔中所述的分割專案檔方法來建立各種自訂 MSBuild 專案檔。 Matt 會建立:

  • 名為 Publish.proj 的專案檔,會執行部署程式。 此檔案包含 MSBuild 目標,可在方案中建置專案、建立 Web 套件,以及將套件部署至目的地伺服器環境。
  • 名為 Env-Dev.projEnv-Stage.proj的環境特定專案檔。 這些包含分別適用于測試環境和預備環境的設定,例如連接字串、服務端點,以及將接收 Web 套件之遠端服務的詳細資料。 如需針對特定目的地環境選擇正確設定的指引,請參閱 設定目標環境的部署屬性

若要執行部署,使用者會使用 MSBuild 或 Team Build 執行 Publish.proj 檔案,並指定相關環境特定專案檔的位置, (Env-Dev.projEnv-Stage.proj) 做為命令列引數。 Publish.proj檔案接著會匯入環境特定的專案檔,以為每個目標環境建立一組完整的發佈指示。

注意

這些自訂專案檔的運作方式與您用來叫用 MSBuild 的機制無關。 例如,您可以直接使用 MSBuild 命令列,如 瞭解專案檔中所述。 您可以從命令檔執行專案檔,如 建立和執行部署命令檔中所述。 或者,您可以從 TFS 中的組建定義執行專案檔,如 建立支援部署的組建定義中所述。
在每個案例中,最終結果都相同—MSBuild 會執行合併的專案檔,並將您的方案部署至目標環境。 這可讓您在觸發發佈程式的方式上擁有極大的彈性。

建立自訂專案檔之後,Matt 會將檔案新增至方案資料夾,並將其簽入原始檔控制中。

建立組建定義

作為最後的準備工作,Matt 和 Rob 會共同合作,為新的小組專案建立三個組建定義:

  • DeployToTest。 這會建置連絡人管理員解決方案,並在每次簽入時部署到測試環境。
  • DeployToStaging。 這會在開發人員將組建排入佇列時,將先前的組建的資源部署到預備環境。
  • DeployToStaging-WhatIf。 當開發人員將組建排入佇列時,這會對預備環境執行「假設」部署。

後續各節會針對這些組建定義提供更詳細的詳細資料。

要測試的部署

Fabrikam, Inc. 的開發小組會維護測試環境,以執行各種軟體測試活動,例如驗證和驗證、可用性測試、相容性測試,以及臨機操作或探勘測試。

開發小組已在名為 DeployToTest的 TFS 中建立組建定義。 此組建定義會使用持續整合觸發程式,這表示每次 Fabrikam, Inc. 開發小組的成員執行簽入時,都會執行建置程式。 觸發組建時,組建定義會:

  • 建置 ContactManager.sln 解決方案。 這接著會建置方案內的每個專案。
  • 如果解決方案建置成功) ,請在方案資料夾結構中執行任何單元測試 (。
  • 如果解決方案建置成功並通過任何單元) 測試,請執行自訂專案檔,以控制部署程式 (。

最終結果是,如果解決方案成功建置並通過單元測試,Web 套件和任何其他部署資源都會部署到測試環境。

最終結果是,如果解決方案成功建置並通過單元測試,Web 套件和任何其他部署資源都會部署到測試環境。

部署程式如何運作?

DeployToTest組建定義會將這些引數提供給 MSBuild:

/p:DeployOnBuild=true;DeployTarget=package;TargetEnvPropsFile=[path]\Env-Dev.proj

當 Team Build 在方案內建置專案時,會使用 DeployOnBuild=trueDeployTarget=package 屬性。 當專案是 Web 應用程式專案時,這些屬性會指示 MSBuild 為專案建立 Web 部署套件。 TargetEnvPropsFile屬性會告訴Publish.proj檔案要在哪裡尋找要匯入的環境特定專案檔。

注意

如需如何建立類似此組建定義的詳細逐步解說,請參閱 建立支援部署的組建定義

Publish.proj檔案包含在方案中建置每個專案的目標。 不過,如果您在 Team Build 中執行檔案,它也包含會略過這些建置目標的條件式邏輯。 這可讓您利用 Team Build 所提供的其他建置功能,例如執行單元測試的能力。 如果方案建置或單元測試失敗,則不會執行 Publish.proj 檔案,而且不會部署應用程式。

條件式邏輯是藉由評估 BuildingInTeamBuild 屬性來完成。 這是 MSBuild 屬性,當您使用 Team Build 來建置專案時,會自動設定為 true

部署至預備環境

當組建符合測試環境中開發人員小組的所有需求時,小組可能會想要將相同的組建部署到預備環境。 預備環境通常會設定為盡可能符合生產環境或「即時」環境的特性,例如,就伺服器規格、作業系統和軟體及網路組態而言。 預備環境通常用於負載測試、使用者接受度測試,以及更廣泛的內部檢閱。 組建會直接從組建伺服器部署到預備環境。

組建會直接從組建伺服器部署到預備環境。

用來將解決方案部署至預備環境的組建定義 DeployToStaging-WhatIfDeployToStaging共用下列特性:

  • 它們實際上不會建置任何專案。 當 Rob 將解決方案部署至預備環境時,他想要部署已在測試環境中驗證並驗證的特定現有組建。 組建定義只需要執行可控制部署程式的自訂專案檔。
  • 當 Rob 觸發組建時,他會使用組建參數來指定哪個組建包含想要從組建伺服器部署的資源。
  • 不會自動觸發組建定義。 Rob 會在想要將解決方案部署至預備環境時,手動將組建排入佇列。

這是部署至預備環境的高階程式:

  1. 預備環境管理員 Rob在建置時,會使用 DeployToStaging-WhatIf 組建定義將組建排入佇列。 Rob 會使用組建定義參數來指定他想要部署的組建。
  2. DeployToStaging-WhatIf組建定義會以「假設狀況」模式執行自訂專案檔。 這會產生記錄檔,就像 Rob 正在執行即時部署一樣,但實際上不會對目的地環境進行任何變更。
  3. Rob 會檢閱記錄檔,以確定部署對預備環境的影響。 特別是,Rob 想要檢查將新增的專案、將更新的專案,以及將刪除的專案。
  4. 如果 Rob 滿意部署不會對現有資源或資料進行任何不想要的變更,他會使用 DeployToStaging 組建定義將組建排入佇列。
  5. DeployToStaging組建定義會執行自訂專案檔。 這些會將部署資源發佈至預備環境中的主要 Web 服務器。
  6. Web Farm Framework (WFF) 控制器會同步處理預備環境中的網頁伺服器。 這讓應用程式可在伺服器陣列中的所有網頁伺服器上使用。

部署程式如何運作?

DeployToStaging組建定義會將這些引數提供給 MSBuild:

/p:TargetEnvPropsFile=[path]\Env-Stage.proj;OutputRoot=[path to build folder]

TargetEnvPropsFile屬性會告訴Publish.proj檔案要在哪裡尋找要匯入的環境特定專案檔。 OutputRoot屬性會覆寫內建值,並指出包含您要部署之資源的組建資料夾位置。 當 Rob 將組建排入佇列時,他會使用 [ 參數 ] 索引標籤來提供 OutputRoot 屬性的更新值。

當 Rob 將組建排入佇列時,他會使用 [參數] 索引標籤來提供 OutputRoot 屬性的更新值。

注意

如需如何建立類似此組建定義的詳細資訊,請參閱 部署特定組建

DeployToStaging-WhatIf組建定義包含與DeployToStaging組建定義相同的部署邏輯。 不過,它包含其他引數 WhatIf=true

/p:TargetEnvPropsFile=[path]\Env-Stage.proj;
   OutputRoot=[path to build folder];
   WhatIf=true

Publish.proj 檔案中, WhatIf 屬性會指出所有部署資源都應該以「假設」模式發佈。 換句話說,會產生記錄檔,就像部署已往前一樣,但目的地環境中不會實際變更任何專案。 這可讓您評估建議部署的影響,特別是將新增的專案、將更新的專案,以及將刪除的專案—在您實際進行任何變更之前。

注意

如需如何設定「假設」部署的詳細資訊,請參閱 執行「假設」部署

將應用程式部署至預備環境中的主要 Web 服務器之後,WFF 會自動將應用程式同步處理到伺服器陣列中的所有伺服器。

注意

如需設定 WFF 以同步處理網頁伺服器的詳細資訊,請參閱 使用 Web 服務器陣列架構建立伺服器陣列

部署到生產環境

在預備環境中核准組建時,Fabrikam, Inc. 小組可以將應用程式發佈至生產環境。 生產環境是應用程式「上線」的地方,並觸達其使用者的目標物件。

生產環境位於網際網路面向的周邊網路中。 這與包含組建伺服器的內部網路隔離。 生產環境管理員 Lisa Andrews 必須手動從組建伺服器複製 Web 部署套件,並將其匯入主要生產 Web 服務器上的 IIS。

生產環境系統管理員必須手動從組建伺服器複製 Web 部署套件,並將其匯入主要生產 Web 服務器上的 I I S。

這是部署至生產環境的高階程式:

  1. 開發人員小組建議 Lisa,組建已準備好部署至生產環境。 小組會建議 Lisa 在組建伺服器上的 drop 資料夾內 Web 部署套件的位置。
  2. Lisa 會從組建伺服器收集 Web 套件,並將其複製到生產環境中的主要 Web 服務器。
  3. Lisa 使用 IIS 管理員在主要網頁伺服器上匯入和發佈 Web 套件。
  4. WFF 控制器會同步處理生產環境中的網頁伺服器。 這讓應用程式可在伺服器陣列中的所有網頁伺服器上使用。

部署程式如何運作?

IIS 管理員包含匯入應用程式封裝精靈,可讓您輕鬆地將 Web 套件發佈至 IIS 網站。 如需如何執行此程式的逐步解說,請參閱 手動安裝 Web 套件

結論

本主題提供一般企業級 Web 應用程式的部署生命週期圖例。

本主題形成一系列教學課程的一部分,這些教學課程提供 Web 應用程式部署各種層面的指引。 在實務上,部署程式的每個階段都有許多其他工作和考慮,而且無法在單一逐步解說中全部涵蓋。 如需詳細資訊,請參閱下列教學課程: