使用 Azure Pipelines 的 CI/CD 基準架構

本文說明將應用程式變更部署至 Azure 中預備和生產環境的高階 DevOps 工作流程。 解決方案會使用持續整合/持續部署 (CI/CD) 做法與 Azure Pipelines。

重要

本文涵蓋使用 Azure Pipelines 的一般 CI/CD 架構。 其目的並非涵蓋部署到不同環境的特定專案,例如 Azure App 服務、虛擬機器 和 Azure Power Platform。 部署平台細節涵蓋於不同的文章中。

架構

使用 Azure Pipelines 的 CI/CD 管線架構圖表。

下載此架構的 Visio 檔案

注意

雖然本文涵蓋應用程式變更的 CI/CD,但 Azure Pipelines 也可用來建置基礎結構的 CI/CD 管線作為程式碼 (IaC) 變更。

資料流程

數據流會流經案例,如下所示:

  1. PR 管線 - Azure Repos Git 的提取要求會觸發 PR 管線。 此管線會執行快速質量檢查。 這些檢查應包括:

    • 建置程序代碼,需要從相依性管理系統提取相依性。
    • 使用工具來分析程序代碼,例如靜態程式代碼分析、linting 和安全性掃描
    • 單元測試

    如果任何檢查失敗,管線執行就會結束,開發人員必須進行必要的變更。 如果所有檢查都通過,管線應該需要PR檢閱。 如果PR檢閱失敗,管線就會結束,開發人員必須進行必要的變更。 如果所有檢查和PR檢閱都通過,PR就會成功合併。

  2. CI 管線 - 合併至 Azure Repos Git 會觸發 CI 管線。 此管線會執行與 PR 管線相同的檢查,其中包含一些重要的新增專案。 CI 管線會執行整合測試。 這些整合測試不應該要求部署解決方案,因為尚未建立組建成品。 如果整合測試需要秘密,管線會從 Azure 金鑰保存庫 取得這些秘密。 如果任何檢查失敗,管線就會結束,而開發人員必須進行必要的變更。 成功執行此管線的結果是建立和發佈組建成品

  3. CD 管線觸發程式 - 發行成品 會觸發CD管線

  4. CD 發行至預備 - CD 管線會下載 CI 管線中建立的組建成品,並將解決方案部署到預備環境。 然後管線會針對預備環境執行驗收測試,以驗證部署。 如果任何驗收測試失敗,管線就會結束,開發人員必須進行必要的變更。 如果測試成功, 可以實作手動驗證工作 ,以要求人員或群組驗證部署並繼續管線。

  5. CD 發行至生產 環境 - 如果手動介入恢復,或未實作手動介入,管線會將解決方案發行至生產環境。 管線應該在生產環境中執行煙霧測試,以確保發行如預期般運作。 如果手動介入步驟導致取消、發行失敗或煙霧測試失敗,則會回復發行、管線結束,而開發人員必須進行必要的變更。

  6. 監視 - Azure 監視器會收集可觀察性數據,例如記錄和計量,讓操作員可以分析健康情況、效能和使用方式數據。 Application Insights 會收集所有應用程式特定的監視數據,例如追蹤。 Azure Log Analytics 用來儲存所有數據。

元件

  • Azure Repos Git 存放庫可作為程式代碼存放庫,提供版本控制和共同作業項目的平臺。

  • Azure Pipelines 提供建置、測試、封裝和發行應用程式和基礎結構程序代碼的方式。 此範例有三個不同的管線,具有下列責任:

    • PR 管線會先驗證程式碼,再允許PR透過Linting、建置和單元測試合併。
    • CI 管線會在合併程式代碼之後執行。 它們會執行與 PR 管線相同的驗證,但如果一切都成功,請新增整合測試和發佈組建成品。
    • CD 管線會部署組建成品、執行驗收測試,以及發行至生產環境。
  • Azure 成品摘要 可讓您管理和共用軟體套件,例如 Maven、npm 和 NuGet。 成品摘要可讓您管理套件的生命週期,包括版本控制、升級和淘汰套件。 這可協助您確保小組使用最新且最安全的套件版本。

  • 金鑰保存庫 可讓您管理解決方案的安全數據,包括秘密、加密密鑰和憑證。 在此架構中,它會用來儲存應用程式秘密。 這些秘密是透過管線存取。 Azure Pipelines 可以使用 金鑰保存庫 工作從 金鑰保存庫 連結秘密來存取秘密。

  • 監視 是可觀察性資源,可收集和儲存 Azure 服務的計量和記錄、應用程式遙測和平臺計量。 使用此資料來監視應用程式、設定警示、儀表板,以及執行失敗的根本原因分析。

  • Application Insights 是一項監視服務,可即時深入解析 Web 應用程式的效能和使用方式。

  • Log Analytics 工作區 提供中央位置,您可以在其中儲存、查詢和分析來自多個來源的數據,包括 Azure 資源、應用程式和服務。

替代項目

雖然本文著重於 Azure Pipelines,但您可以考慮下列替代方案:

  • Azure DevOps Server (先前稱為 Team Foundation Server)可作為內部部署替代專案。

  • Jenkins 是用來自動化建置和部署的 開放原始碼 工具。

  • GitHub Actions 可讓您直接從 GitHub 自動化 CI/CD 工作流程。

  • GitHub 存放庫 可以取代為程式代碼存放庫。 Azure Pipelines 與 GitHub 存放庫緊密整合。

本文著重於使用 Azure Pipelines 的一般 CI/CD 做法。 以下是您可以考慮部署的一些計算環境:

  • App Services 是以 HTTP 為基礎的服務,用於裝載 Web 應用程式、REST API 和行動後端。 您可以使用慣用的語言進行開發,而且應用程式可在 Windows 和 Linux 環境中輕鬆執行和調整。 Web Apps 支援部署位置,例如預備和生產環境。 您可以將應用程式部署至預備位置,並將它釋放至生產位置。

  • Azure 虛擬機器 處理需要高度控制的工作負載,或依賴 Web Apps 無法使用的作業系統元件和服務(例如 Windows GAC 或 COM)。

  • Azure Power Platform 是雲端服務的集合,可讓使用者建置、部署及管理應用程式,而不需要基礎結構或技術專長。

  • Azure Functions 是無伺服器計算平臺,可用來建置應用程式。 透過 Functions,您可以使用觸發程式和系結來整合服務。 函式也支援部署位置,例如預備和生產環境。 您可以將應用程式部署至預備位置,並將它釋放至生產位置。

  • Azure Kubernetes Service (AKS) 是 Azure 中的受控 Kubernetes 叢集。 Kubernetes 是 開放原始碼 容器協調流程平臺。

  • Azure Container Apps 可讓您在無伺服器平台上執行容器化應用程式。

案例詳細資料

使用經證實的 CI 和 CD 做法來部署應用程式或基礎結構變更,可提供各種優點,包括:

  • 較短的發行週期 - 自動化 CI/CD 程式可讓您比手動做法更快部署。 許多組織每天部署多次。
  • 更好的程式代碼品質 - CI 管線中的品質閘道,例如 Linting 和單元測試,會產生更高的品質程式代碼。
  • 降低發行 的風險 - 適當的 CI/CD 做法可大幅降低發行新功能的風險。 部署可以在發行前進行測試。
  • 提高生產力 - 自動化 CI/CD 可讓開發人員能夠專注於手動整合和部署,讓開發人員能夠專注於新功能。
  • 啟用復原 - 雖然適當的 CI/CD 做法會降低發行的 Bug 或回歸數目,但仍會發生。 CI/CD 可以啟用舊版的自動復原。

潛在使用案例

請考慮下列專案的 Azure Pipelines 和 CI/CD 程式:

  • 加速應用程式開發和部署生命週期。
  • 將品質和一致性建置至自動化建置和發行程式。
  • 增加應用程式穩定性和運行時間。

考量

這些考量能實作 Azure Well-Architected Framework 的要素,其為一組指導原則,可以用來改善工作負載的品質。 如需詳細資訊,請參閱 Microsoft Azure Well-Architected Framework (部分機器翻譯)。

卓越營運

  • 請考慮實作 基礎結構即程序代碼 (IaC), 以定義您的基礎結構,並將其部署在管線中。

  • 請考慮使用 VSTS 市集中提供的其中一個 令牌化 工作,在內容中,通常是指敏感性資訊(例如 API 金鑰、密碼或其他秘密)在部署或設定期間會以令牌或佔位元取代的程式。

  • 發行定義中使用發行變數 來驅動環境的組態變更。 發行變數的範圍可以限定於整個版本或指定的環境。 使用變數進行秘密資訊時,請確定您選取掛鎖圖示。

  • 如果您要部署到在受保護的虛擬網路中執行的資源,請考慮使用 自我裝載代理 程式。 如果您正在執行大量組建,您也可以考慮自我裝載代理程式。 在大量建置磁碟區的情況下,可以使用自我裝載代理程式,以符合成本效益的方式加速組建。

  • 請考慮盡早在發行管線中使用 ApplicationInsights 和其他監視工具。 許多組織只會在其生產環境中開始監視。 藉由監視其他環境,您可以識別開發程式稍早的錯誤,並避免生產環境中的問題。

  • 請考慮將個別的監視資源用於生產環境。

  • 請考慮使用 YAML 管線,而不是傳統介面。 YAML 管線可以像其他程式代碼一樣處理。 例如,YAML 管線可以簽入原始檔控制和版本控制。

  • 請考慮使用 YAML 範本 來提升重複使用和簡化管線。 例如,PR 和 CI 管線很類似。 單一參數化範本可用於這兩個管線。

  • 請考慮在預備和生產環境以外建立環境,以支援手動使用者驗收測試、效能和負載測試,以及復原等活動。

成本最佳化

成本最佳化是關於考慮如何減少不必要的費用,並提升營運效率。 如需詳細資訊,請參閱成本最佳化要素的概觀

Azure DevOps 成本取決於組織中需要存取的用戶數目,以及其他因素,例如所需的並行組建/發行數目和測試用戶數目。 如需詳細資訊,請參閱 Azure DevOps 定價

定價計算機 提供 20 位使用者執行 Azure DevOps 的估計值。

Azure DevOps 會依每位使用者每月計費。 除了任何其他測試用戶或使用者基本授權之外,可能需要更多費用,視需要並行管線而定。

安全性

下一步

檢閱下列資源以深入瞭解 CI/CD 和 Azure DevOps: