共用方式為


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

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

重要

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

建築

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

下載此架構的 Visio 檔案

注意

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

數據流

資料流會通過情境,如下所示:

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

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

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

  2. CI 管線 - 合併至 Azure Repos Git 會觸發 CI 管線。 此管線會執行與 PR 管線相同的檢查,並包含一些重要的額外內容。 CI 流程會執行整合測試。 整合測試可能會耗用大量資源,因此在 CI 管線中執行它們會平衡開發速度和 Bug 偵測。 也請務必注意,在 PR 中通過測試並不一定會在合併之後成功,因為主要分支中的變更可能會帶來新的問題,強調合併後測試的需求。 這些因素使 CI 管線比 PR 管線更適合用於整合測試。 這些整合測試不應該要求部署解決方案,因為尚未建立組建成品。 如果整合測試需要秘密,管線會從 Azure Key Vault 取得這些秘密。 如果任何檢查失敗,管線就會結束,而開發人員必須進行必要的變更。 成功執行此管線的結果是產生並發佈建置成品。

  3. CD 流程觸發器 - 發佈工件 會觸發 CD 流程

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

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

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

元件

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

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

    • PR 管線會先驗證程式碼,再允許 PR 透過程式碼檢查、編譯和單元測試合併。
    • CI 管線會在合併程式代碼之後執行。 這些流程會執行與 PR 管線相同的驗證功能,並新增整合測試功能,並在一切成功的情況下發佈建置產物。
    • CD 流程會部署建置成品、執行驗收測試,以及發行至生產環境。
  • Azure Artifact Feeds 可讓您管理和共用軟體套件,例如 Maven、npm 和 NuGet。 工件饋送允許您管理套件的生命週期,包括版本控制、提升和淘汰套件。 這可協助您確保小組使用最新且最安全的套件版本。

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

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

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

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

替代方案

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

  • Azure DevOps Server 可作為內部部署替代專案。

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

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

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

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

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

  • Azure 虛擬機器 處理需要高度控制的工作負載,或依賴於無法由 Web Apps 提供的作業系統元件和服務。

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

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

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

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

案例詳細數據

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

  • 較短的發行週期 - 自動化 CI/CD 程式可讓您比手動做法更快部署。 許多組織每天部署多次。
  • 更好的程式代碼品質 - CI 管線中的品質門檻,例如程式碼檢查和單元測試,可以提高程式代碼的品質。
  • 降低發行 的風險 - 適當的 CI/CD 做法可大幅降低發行新功能的風險。 部署可以在發行前進行測試。
  • 提高生產力 - 自動化 CI/CD 使開發人員不再需要手動整合和部署,進而專注於新功能的開發。
  • 啟用回滾 - 儘管妥善的 CI/CD 實作能降低所發佈錯誤或回歸問題的數量,但這些問題仍可能發生。 CI/CD 可以啟用舊版的自動復原。

潛在的使用案例

請考慮 Azure Pipelines 和 CI/CD 流程:

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

考量因素

這些考慮會實作 Azure Well-Architected Framework 的要素,這是一組可用來改善工作負載質量的指導原則。 如需詳細資訊,請參閱 Microsoft Azure Well-Architected Framework

卓越營運

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

  • 請考慮在 VSTS 市集使用其中一個可用的 令牌化工作,這個過程通常指的是敏感資訊(例如 API 金鑰、密碼或其他秘密)在部署或配置時以令牌或佔位符取代。

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

  • 如果您要部署至在安全虛擬網路中運行的資源,請考慮使用 自架代理。 如果您正在執行大量組建,您可以考慮使用自託管代理。 在大量建置的情況下,可以使用自我託管代理,以成本效益的方式加速建置。

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

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

  • 請考慮使用 YAML 管線 而不是傳統介面。 YAML 管線可以像其他程式代碼一樣處理。 例如,YAML 管線可以提交到原始碼管理系統並進行版本控制。

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

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

成本優化

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

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

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

Azure DevOps 會依每位使用者每月計費。 可能會產生更多費用,這取決於所需的並行管線數量,以及是否需要額外的測試使用者或使用者基本授權。

安全

  • 在選擇使用 Microsoft 裝載或自我裝載的代理程式時,請考慮使用 Microsoft 裝載代理程式的 安全性優點

  • 請確定所有環境變更都是透過管線完成的。 根據最低許可權原則實作角色型訪問控制 (RBAC),以防止使用者存取環境。

  • 請考慮整合 Azure Pipelines 中的步驟來追蹤相依性、管理授權、掃描弱點,以及讓相依性保持在最新狀態。

後續步驟

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