使用 Azure Pipelines 的 CI/CD 基準架構
本文說明將應用程式變更部署至 Azure 中預備和生產環境的高階 DevOps 工作流程。 解決方案會使用持續整合/持續部署 (CI/CD) 做法與 Azure Pipelines。
重要
本文涵蓋使用 Azure Pipelines 的一般 CI/CD 架構。 其目的並非涵蓋部署到不同環境的特定專案,例如 Azure App 服務、虛擬機器 和 Azure Power Platform。 部署平台細節涵蓋於不同的文章中。
架構
注意
雖然本文涵蓋應用程式變更的 CI/CD,但 Azure Pipelines 也可用來建置基礎結構的 CI/CD 管線作為程式碼 (IaC) 變更。
資料流程
數據流會流經案例,如下所示:
PR 管線 - Azure Repos Git 的提取要求會觸發 PR 管線。 此管線會執行快速質量檢查。 這些檢查應包括:
- 建置程序代碼,需要從相依性管理系統提取相依性。
- 使用工具來分析程序代碼,例如靜態程式代碼分析、linting 和安全性掃描
- 單元測試
如果任何檢查失敗,管線執行就會結束,開發人員必須進行必要的變更。 如果所有檢查都通過,管線應該需要PR檢閱。 如果PR檢閱失敗,管線就會結束,開發人員必須進行必要的變更。 如果所有檢查和PR檢閱都通過,PR就會成功合併。
CI 管線 - 合併至 Azure Repos Git 會觸發 CI 管線。 此管線會執行與 PR 管線相同的檢查,其中包含一些重要的新增專案。 CI 管線會執行整合測試。 這些整合測試不應該要求部署解決方案,因為尚未建立組建成品。 如果整合測試需要秘密,管線會從 Azure 金鑰保存庫 取得這些秘密。 如果任何檢查失敗,管線就會結束,而開發人員必須進行必要的變更。 成功執行此管線的結果是建立和發佈組建成品
CD 管線觸發程式 - 發行成品 會觸發CD管線。
CD 發行至預備 - CD 管線會下載 CI 管線中建立的組建成品,並將解決方案部署到預備環境。 然後管線會針對預備環境執行驗收測試,以驗證部署。 如果任何驗收測試失敗,管線就會結束,開發人員必須進行必要的變更。 如果測試成功, 可以實作手動驗證工作 ,以要求人員或群組驗證部署並繼續管線。
CD 發行至生產 環境 - 如果手動介入恢復,或未實作手動介入,管線會將解決方案發行至生產環境。 管線應該在生產環境中執行煙霧測試,以確保發行如預期般運作。 如果手動介入步驟導致取消、發行失敗或煙霧測試失敗,則會回復發行、管線結束,而開發人員必須進行必要的變更。
監視 - 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 會依每位使用者每月計費。 除了任何其他測試用戶或使用者基本授權之外,可能需要更多費用,視需要並行管線而定。
安全性
請確定所有環境變更都是透過管線完成的。 根據最低許可權原則實作角色型訪問控制 (RBAC),以防止使用者存取環境。
請考慮整合 Azure Pipelines 中的步驟來追蹤相依性、管理授權、掃描弱點,以及讓相依性保持在最新狀態。
下一步
檢閱下列資源以深入瞭解 CI/CD 和 Azure DevOps:
- 什麼是 DevOps?
- Microsoft 的 DevOps - 我們如何與 Azure DevOps 搭配運作
- 使用 Azure DevOps Projects 建立適用於 .NET 的 CI/CD 管線
- 什麼是 Azure Repos?
- 什麼是 Azure Pipelines?
- Azure DevOps
- App Service 概觀
- Azure Functions 簡介
- Azure 金鑰保存庫 基本概念
- Azure 監視器概觀