PaaS 的 DevTest 和 DevOps 解決方案

Boards
Azure DevOps
Pipelines
GitHub

解決方案構想

本文是解決方案概念。 如果您想要以詳細資訊擴充內容,例如潛在的使用案例、替代服務、實作考慮或定價指引,請提供 GitHub 意見反應讓我們知道。

平臺即服務 (PaaS) 雲端運算中,服務提供者會提供平臺供用戶端開發、執行和管理應用程式,而不需要建置和維護基礎結構。 以 Azure 平臺資源和服務為基礎的解決方案開發會移除管理虛擬機器、虛擬網路、磁片和相關設定的額外負荷。

開發測試 (DevTest) 是一種軟體發展方法,可在開發階段初期整合測試。 DevOps 是結合軟體發展和 IT 作業的一組做法,可縮短開發週期,並以高品質提供持續傳遞。

此解決方案架構結合了降低的額外負荷和 DevOps 工具鏈,以支援快速的 DevTest 反復專案週期,以及具有 PaaS 資源的快速開發環境。

潛在使用案例

此結構適用於需要下列各項的組織:

  • 從一開始就為 DevTest 工作負載提供完全整合的操作控制平面。
  • 平台和應用程式工作負載之間的考量清楚分隔。

架構

此圖顯示 PaaS 應用程式的 DevTest 和 DevOps 組態。

下載這個架構的 Visio 檔案

資料流程

  1. 開發人員會使用 GitHub Codespaces 預先設定的開發環境,以避免手動設定開發環境。 開發人員可以使用瀏覽器中的 Codespace 或透過Visual Studio Code

  2. GitHub 存放庫中提供原始程式碼,可順暢地與Azure DevOps整合。

  3. 與 Azure DevOps 類似,GitHub Actions設定自動化組建,以在 GitHub 認可或提取要求上觸發。 在目前的方案中,建置動作會將成品發佈至 GitHub 套件 來源套件以進行部署。

  4. Azure Boards會連線回 GitHub Repos,以從自動化和手動測試產生工作專案,並追蹤開發週期中的所有工作。

  5. 開發人員會建立功能或修正分支,讓工作專案與開發短期衝刺或週期產生關聯,並追蹤所有具有工作和需求的程式碼。 透過這種方法,開發人員會維持對敏捷式軟體發展至關重要的作用中開發迴圈速度。

  6. Azure Pipelines 是 Azure PaaS 部署的解決方案。 Azure Pipelines 會處理 CD) 和發行工作 (持續部署,其會取用GitHub Actions組建所公開的套件版本。 Azure Pipelines 使用Azure 金鑰保存庫安全地取用秘密,例如發行和部署組態所需的認證和連接字串。

  7. Azure Pipelines 部署工作特別支援 Azure PaaS 資源,包括 Web 應用程式部署:

    1. 透過GitHub Actions的持續組建,持續發行會將最新的應用程式組建部署到開發環境。
    2. 管線會將選取的組建升階至測試環境下一個部署通道。
    3. 建置通過所有測試之後,會在下一個外部通道中升級並暫存 使用者接受度測試 (UAT)

    這三個 DevTest 環境都存在於折扣成本 Azure DevTest 訂用帳戶之下。 Azure 原則可以針對 App Services 或 PaaS 資料庫的大小和數目新增更多規則,以限制成本。

  8. 當解決方案品質達到生產狀態時,Azure Pipelines 會觸發生產版本。 管線會將生產環境部署限制為所需的最小數目。

    針對App Service,Pipelines 版本可以將目標群組建版本部署到生產環境應用程式位置中的生產資源,然後將位置交換至生產環境。 如果在將生產階段前移轉至生產環境期間發生問題,App Service可以復原交換,以取得額外的部署安全性。

在此解決方案中,單一 Azure Active Directory (Azure AD) 管理 DevTest 和 Production 訂用帳戶的身分識別。 Azure 角色型存取控制 (Azure RBAC) 會限制對受保護資源的存取,防止未經授權的或不小心修改生產資源。 開發人員在其 DevTest 沙箱中沒有相同的存取控制層級。

Terraform 會為每個環境布建和修改資源、量身打造大小、實例計數和其他屬性。 目前的解決方案會建立Azure App 服務、Azure Cache for Redis和 Azure SQL 資料庫的環境堆疊模型。

Azure 監視器 可跨訂用帳戶運作,以監視所有環境並收集記錄、損毀傾印報告和應用程式資料。

單元

  • GitHub 是用於版本控制和共同作業的程式碼裝載平臺,具有其他整合功能:

    • GitHub 原始檔控制存放 包含所有專案檔及其修訂歷程記錄。 開發人員可以共同合作,在存放庫中參與、討論和管理程式碼。
    • GitHub Codespaces 可為開發人員提供預先設定的開發環境,這些環境涵蓋程式庫相依性、使用者設定和延伸模組。 開發人員可以在 GitHub 中布建程式碼空間,並透過瀏覽器內或透過Visual Studio Code加以使用。
    • GitHub Actions提供一套組建和發行工作流程,涵蓋 CI () 、自動化測試和Azure Resource Manager (ARM) 範本或容器部署的持續整合。
    • GitHub Packages 套件 裝載服務允許裝載軟體套件,並將其當做專案中的相依性使用。
  • Azure Boards是一項服務,可用來管理軟體專案的工作。 Azure Boards提供一組豐富的功能,包括 Scrum 和 Kanban 方法的原生支援、可自訂的儀表板,以及整合式報告。

  • Azure Pipelines 會部署 VM 應用程式映射。 管線也可以透過Azure Resource Manager (ARM) 範本自行部署 VM 資源。 此 基礎結構即程式碼 可為 CI/CD 進行原始檔控制及設定,以確保基礎結構保持最新狀態。

  • Azure 金鑰保存庫安全地儲存並嚴格控制 API 金鑰、密碼和憑證等秘密的存取。 如需 DevOps 案例中金鑰保存庫的詳細資訊,請參閱 GitHub 中的AKSDevSecOps 上的 DevSecOps

  • Azure AD 企業身分識別平臺提供單一登入和多重要素驗證,以控管用戶對資源的存取。 在目前的案例中,Azure AD 會與 Azure RBAC 搭配運作,以限制每個環境的存取。

  • Terraform 是協力廠商工具,可布建和修改每個環境的資源。 目前的解決方案會布建Azure App 服務、Azure Cache for Redis和 Azure SQL 資料庫的環境堆疊。

    Terraform 也支援跨平臺 基礎結構即程式碼 組態,以及跨 Azure 和其他雲端提供者的部署。 基礎結構即程式碼可讓開發人員以驗證程式代碼變更的方式驗證基礎結構變更。

  • Azure App 服務是完全受控的 Web 裝載服務,可用於建置 Web 應用程式。 App Service支援 DevOps 功能,例如 CD、套件管理、預備環境、自訂網域和 TLS/SSL 憑證。

  • Azure Cache for Redis會根據開放原始碼軟體 Redis 提供記憶體內部資料存放區,其可改善依賴後端資料存放區之應用程式的效能和延展性。

  • Azure SQL Database是完全受控的 PaaS 資料庫引擎,可處理大部分的資料庫管理功能,例如升級、修補、備份和監視,而不需使用者介入。

  • Azure 原則管理符合組織標準和合規性的資源。 在 DevTest 角色中,Azure 原則可以規範和限制 VM 的數目和成本。 稽核可以提供深入解析,並追蹤 DevTest VM 的使用方式。

  • Azure 監視器 可以監視 Production 和 DevTest 環境。 Azure 監視器可以從 VM 作業系統收集記錄資料,並損毀傾印檔案,並匯總它們以供在雲端Microsoft Defender中檢視。 Application Insights是 Azure 監視器的功能,可與App Service搭配運作,以監視應用程式效能和問題。

替代方案

  • 雖然此架構會使用 Azure Pipelines 進行部署,但GitHub Actions也可以執行 PaaS 部署。

  • Azure Pipelines 中提供的某些整合,例如服務連線或直接整合到 Azure 骨幹中,目前不存在於GitHub Actions中。 針對這些需求,請考慮使用 Azure Pipelines,而不是針對 CI 和建置活動使用GitHub Actions。

  • 雖然 Terraform 是功能強大的環境管理工具,但其主要功能之一是跨平臺功能。 針對只存在於 Azure 中的應用程式,請考慮使用 ARM 範本而非 Terraform 進行資源部署。 ARM 範本具有直接的 Microsoft 支援、在 Azure Pipelines 中擁有自己的工作,而且可能能夠部署 Terraform 中無法立即提供的功能或屬性。

考量

開發適當支援 Web 應用程式的Azure SQL資料庫設計是重要的考慮。 原始檔控制和版本控制對於程式碼和組建而言,對於資料架構而言很重要。

Entity Framework之類的工具可以透過移轉提供資料庫架構變更的原始檔控制。 移轉會將變更編入資料庫結構,並在發生問題時提供方法,以向前前進和回復變更。

下一步