Azure Pipelines CI/CD 基準架構

本文介紹一個基礎架構,用於使用 Azure Pipelines 建立持續整合與持續部署(CI/CD)管線。 如果你需要自動化建置、測試及部署應用程式到Azure的暫存與生產環境,請以此架構作為起點。 架構定義了三個管線:拉取請求(PR)、持續整合(CI)和持續部署(CD),並展示它們如何與 Azure Repos、Azure Key Vault 及 Azure 監視器 協同運作,安全驗證、建置並部署您的應用程式。

建築

使用 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 管線執行整合測試而非 PR 管線,原因有二:

    • 整合測試可能非常耗費資源,因此合併後執行測試能平衡開發速度與錯誤偵測。
    • 通過 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 Artifacts 訂閱源讓你能管理並分享軟體套件,例如 Maven、npm 和 NuGet。 摘要可讓你管理套件的生命週期,包括版本控管、推廣及淘汰套件,這有助於確保你的團隊使用相依性套件中最新且最安全的版本。

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

  • 監視器 是可觀察性資源,可收集和儲存 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 環境中輕鬆執行和調整。 App Service 支援部署時段,如暫存和生產環境,因此你可以先部署應用程式到暫存時段,再釋放到生產區。

  • Azure 虛擬機器 處理需要高度控制或依賴作業系統元件與服務的工作負載,而這些是 App Service 無法實現的。

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

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

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

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

案例詳細數據

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

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

潛在的使用案例

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

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

考量因素

這些考量實現了 Azure Well-Architected 框架的支柱,這是一套指導原則,用以提升工作負載的品質。 如需詳細資訊,請參閱 Microsoft Azure Well-Architected Framework。

卓越營運

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

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

  • 如果您要部署至在受保護的虛擬網路中執行的資源,或需要執行大量建置,建議使用 自我裝載代理程式。 自架代理程式可協助您以符合成本效益的方式,在大規模環境中加速建置。

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

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

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

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

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

成本優化

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

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

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

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

安全性

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

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

  • 考慮在 Azure Pipelines 中整合步驟,追蹤相依性、管理授權、掃描漏洞並保持相依性的最新狀態。

後續步驟