本文介紹一個基礎架構,用於使用 Azure Pipelines 建立持續整合與持續部署(CI/CD)管線。 如果你需要自動化建置、測試及部署應用程式到Azure的暫存與生產環境,請以此架構作為起點。 架構定義了三個管線:拉取請求(PR)、持續整合(CI)和持續部署(CD),並展示它們如何與 Azure Repos、Azure Key Vault 及 Azure 監視器 協同運作,安全驗證、建置並部署您的應用程式。
建築
下載此架構的 Visio 檔案。
注意
雖然本文涵蓋應用程式變更的 CI/CD,但 Azure Pipelines 也可用來建置用於基礎設施即程式碼(IaC)變更的 CI/CD 管線。
數據流
資料流會通過情境,如下所示:
PR 管線 - 提交到 Azure Repos Git 的拉取請求會觸發 PR 管線。 此管線會執行快速質量檢查。 這些檢查應包括:
- 建置程序代碼,需要從相依性管理系統提取相依性。
- 使用工具來分析程式碼,例如靜態程式碼分析、代碼檢查和安全性掃描
- 單元測試
如果任何檢查失敗,管線執行就會結束,開發人員必須進行必要的變更。 如果所有檢查都通過,管線應該需要PR檢閱。 如果PR檢閱失敗,管線就會結束,開發人員必須進行必要的變更。 如果所有檢查和PR檢閱都通過,PR就會成功合併。
CI 管線 - 合併至 Azure Repos Git 會觸發 CI 管線。 此管線執行與PR管線相同的檢查,並包含整合測試。 CI 管線執行整合測試而非 PR 管線,原因有二:
- 整合測試可能非常耗費資源,因此合併後執行測試能平衡開發速度與錯誤偵測。
- 通過 PR 測試並不保證合併後仍能通過,因為主分支的變更可能會帶來只有合併後測試才能發現的新問題。
這些整合測試不應該需要部署解決方案,因為建置產物尚未建立。 如果測試需要機密,管線會從 Azure Key Vault 擷取這些機密。 若有任何檢查失敗,流程即告終止,開發者必須做出必要的變更。 成功執行此流程後,會產生並發佈建置工件。
CD 流程觸發器 - 發佈工件 會觸發 CD 流程。
CD 發行至暫存 - CD 管線會下載在 CI 管線中建立的組建成品,並將解決方案部署至暫存環境。 然後管線會針對預備環境執行驗收測試,以驗證部署。 如果任何驗收測試失敗,流程就會結束,開發人員需要進行必要的修改。 如果測試成功,可以實作 手動驗證工作,以要求人員或群組驗證部署並繼續管線。
CD 發行到生產環境 - 如果人工干預恢復,或未實施人工干預,管道會將解決方案發行到生產環境。 管線應該在生產環境中執行煙霧測試,以確保發行如預期般運作。 如果手動介入步驟導致取消、部署失敗或煙霧測試失敗,部署會被回復,管線會結束,而開發人員必須進行必要的變更。
監視 - 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 中整合步驟,追蹤相依性、管理授權、掃描漏洞並保持相依性的最新狀態。
後續步驟
相關資源
- 架構策略
- DevOps for IaaS 解決方案架構
- 在 Kubernetes 上建置微服務的 CI/CD 管線