微服務的 DevTest 和 DevOps 解決方案

Boards
Container Registry
Kubernetes Service
Pipelines
GitHub

解決方案構想

如果您想要瞭解如何使用詳細資訊、實行詳細資料、定價指引或程式碼範例來擴充本文,請讓我們知道 GitHub 意見反應!

微服務架構會將應用程式設計為鬆散結合服務的集合。 在微服務架構中,服務是精密的,通訊協定則很輕量。 微服務供應專案的優點,例如清楚分隔相依性和分離相關性。

相較于傳統整合型應用程式,微服務在開發週期中帶來了複雜性。 傳統上,開發是在應用程式堆疊的本機或虛擬複本中進行,它會在本機以隔離方式設定和執行計算和儲存元件。 在微服務模型中,開發人員需要針對現有的架構測試其服務、及早攔截整合問題以節省組建和部署時間,並在應用程式的生命週期保持乾淨的整合組建。

開發測試 (DevTest) 是一種軟體發展方法,可在開發階段早期整合測試以加速開發。 DevOps 是一組結合軟體發展和 IT 作業的做法,可縮短開發週期並提供高品質的持續傳遞。 Kubernetes 是一個開放原始碼容器協調流程系統,可將應用程式部署自動化。

此解決方案架構會建立開發和部署環境的模型,以在 DevTest 中使用 DevOps 來快速反復開發 Azure Kubernetes Service (AKS) 微服務應用程式。

架構

此圖顯示微服務應用程式的 DevTest 和 DevOps 設定。

  1. 開發人員使用 本機進程搭配 Kubernetes ,在開發 Kubernetes 叢集的內容中執行其本機微服務版本。 在偵錯工具時連接到叢集,可讓您在完整的應用程式內容中快速進行測試和開發。

  2. 每個微服務程式代碼基底會針對原始檔控制使用不同的 GitHub 程式碼存放庫。

  3. GitHub Actions 會建立微服務容器映射,並將其推送至 Azure containerregistry。 GitHub Actions 也會更新存放庫的 最新 標記以進行持續整合 (CI) 或標記存放庫以供發行。

  4. GitHub Actions 自動化測試會產生 Azure Boards的工作專案,讓所有工作專案都可在單一位置進行管理。

  5. Visual Studio Code 擴充功能支援 Azure Boards 和 GitHub 整合。 將 Azure Boards 工作專案與 GitHub 存放庫建立關聯會將需求系結至程式碼,進而推動開發迴圈的進展。

  6. 合併到整合分支觸發程式中的認可,GitHub Actions 組建和 Docker 推送至 DevTest 容器登錄。 每個微服務在 Container registry 中都有自己的存放庫,平行 GitHub 存放庫。 CI 組建通常會標記為 最新,代表最新成功的微服務組建。

  7. Azure Pipelines 會執行 Kubernetes apply 命令,以觸發將更新容器登錄映射部署至 DevTest Kubernetes 叢集的程式。 Azure 可以驗證 AKS,以執行自動的容器登錄提取,以簡化持續部署 (CD) 流程。

    Azure Pipelines 使用 Azure Key Vault 安全地取用像是發行和部署設定所需的認證和連接字串等秘密。

  8. 當某個版本的應用程式準備好進行品質保證 (QA) 測試時,Azure Pipelines 會觸發 QA 版。 管線會以下一個累加版本戳記所有適當的映射,更新 Kubernetes 資訊清單以反映影像標籤,然後執行 apply 命令。 在此範例中,開發人員可能會以隔離方式逐一查看服務,而只有透過 CI/CD 整合的組建會移至部署。

  9. 在測試核准了某個版本的服務以進行部署之後,GitHub Actions 會將發行從 DevTest 容器登錄升級到生產容器登錄。 GitHub Actions 使用適當的版本戳記映射,並將其推送至生產容器登錄,請遵循 Container registry 的最佳作法

  10. Azure Pipelines 會建立發行至生產環境。 此管線會強加核准閘道和預備階段和後續階段條件,以保護生產環境免于不慎或不正確的部署。

應用程式會使用 Azure Cosmos DB 用於其全域散發的資料庫層。

所有服務和環境都會將計量報告為 Azure 監視器

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

單元

  • Azure DevTest Labs 提供的實驗室擁有所有必要的工具和軟體,以建立環境。 開發人員可以有效率地自行管理資源,而不需要等待核准。 有了 DevTest Labs,小組就可以控制每個實驗室的成本及管制資源,授與開發人員在成本限制內操作沙箱的許可權和彈性。

  • GitHub 是一個程式碼裝載平臺,可進行版本控制和共同作業。 GitHub 原始檔控制存放 包含所有專案檔及其修訂歷程記錄。 開發人員可以共同合作來參與、討論和管理存放庫中的程式碼。

  • GitHub Actions 提供一套組建和發行工作流程,其中涵蓋 CI、自動化測試和容器部署。

  • Azure Boards 是用來管理軟體專案工作的服務。 Azure Boards 引進一組豐富的功能,包括對 Scrum 和看板方法的原生支援、可自訂的儀表板,以及整合式報告。

  • Azure Pipelines 是功能齊全的 CI/CD 服務,可自動將更新的容器登錄映射部署至 Kubernetes 叢集。

  • Azure Key Vault 安全地儲存及嚴密控制對秘密的存取,例如 API 金鑰、密碼和憑證。 如需有關 DevOps 案例中 Key Vault 的詳細資訊,請參閱 Azure 中的 DevSecOps 和 GitHub 中的 DevSecOps

  • Azure Container Registry 支援在所有容器部署類型的私用登錄中,建立、儲存及管理容器映射和構件。

  • Azure Kubernetes Service 可讓您輕鬆地部署受控 Kubernetes 叢集,方法是將許多複雜性、責任和操作額外負荷卸載至 Azure。

  • Azure Active Directory (Azure AD) 企業身分識別平臺提供單一登入和多重要素驗證來管理使用者存取權。 單一 Azure AD 可以跨訂用帳戶管理所有環境的身分識別。 Azure 角色型存取控制 (AZURE RBAC) 限制對受保護資源的存取,以防止未經授權或意外修改生產資源。

  • Azure Cosmos DB 是完全受控、廣泛散發的資料庫即服務,可支援高可用性、多區域應用程式,以及 SQL 和 NoSQL api。 Azure Cosmos DB 包含 DevTest 功能,例如與 Azure DevOps 整合的本機 Cosmos DB 模擬器,以及 DevTest 沙箱中管理成本的低成本層級。

  • Azure 監視器 可以監視生產環境和 DevTest 環境。 Azure 監視器會從 VM 作業系統和損毀傾印檔案收集記錄資料,並匯總它們以在 Azure 資訊安全中心中進行查看。

替代方案

  • Azure Repos 是適用于 Git 存放庫裝載的 GitHub 替代方案。 使用 Azure Repos、Azure Boards 和 Azure Pipelines,所有 Azure DevOps Services 都使用相同的入口網站和使用者介面,以合併開發人員 DevOps 活動所需的服務。

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

  • 在分散式系統中,將微服務區分為個別的存放庫有其優點。 擁有權和許可權的分隔比較簡單,而且不同語言的專案比使用單一儲存機制更容易維護。 不過,在具有較少微服務的方案中,所有專案都在相同的語言或執行時間中,為專案維護單一 Git 儲存機制可能比較容易。

下一步