分享方式:


使用 GitOps 的 CI/CD 工作流程 (Flux v2)

新式 Kubernetes 部署包含多個應用程式、叢集和環境。 透過 GitOps,您可以更輕鬆地管理這些複雜的設定,使用 Git 以宣告方式追蹤 Kubernetes 環境的預期狀態。 使用常見的 Git 工具來宣告叢集狀態,您可以增加責任劃分、加快錯誤調查效率,以及啟用自動化來管理環境。

本文說明 GitOps 如何使用 Azure Arc、Azure Repos 和 Azure Pipelines 融入完整的應用程式變更生命週期。 此外也提供範例示範單一應用程式在 GitOps 管理的 Kubernetes 環境中進行變更。

架構

此圖顯示部署至一或多個 Kubernetes 環境之應用程式的 CI/CD 工作流程。

顯示 GitOps CI/CD 結構的圖表。

應用程式程式碼存放庫

應用程式存放庫包含開發人員在其內部迴圈期間使用的應用程式程式碼。 應用程式的部署範本會以通用形式存在於此存放庫中,例如 Helm 或 Kustomize。 環境特定值不會儲存在存放庫中。

此存放庫的變更會叫用可啟動部署程序的 PR 或 CI 管線。

Container Registry:

容器登錄會保存 Kubernetes 環境中使用的所有第一方和協力廠商映像。 使用人類可讀取的標籤和用來建置映像的 Git 認可來標記第一方應用程式映像。 可以快取第三方映像,以協助安全性、速度和復原能力。 設定及時測試和整合安全性更新的計畫。

如需詳細資訊,請參閱如何使用 Azure Container Registry 工作來取用和維護公用內容

PR 管線

開發人員對應用程式存放庫所發出的提取要求取決於 PR 管線的成功執行。 此管線會在應用程式程式碼上執行基本品質管制,例如 Lint 分析和單元測試。 管線會測試應用程式,並對用於部署至 Kubernetes 環境的 Dockerfiles 和 Helm 範本使用 Lint。 Docker 映像應該經過建置和測試,但不應該推送。 讓管線持續時間保持在相對短的時間,以允許快速反覆。

CI 管線

應用程式 CI 管線會執行所有 PR 管線步驟,並展開測試和部署檢查。 每個主分支認可都可以執行管線,也可以搭配一組認可定期執行管線。

在這個階段,可以執行太耗用 PR 管線的應用程式測試,包括:

  • 將映像推送至容器登錄
  • 映像建置、Lint 分析和測試
  • 產生原始 YAML 檔案的範本

在 CI 建置結束時,會產生成品。 CD 步驟可以使用這些成品來取用,以準備部署。

Flux 叢集延伸模組

Flux 是作為叢集延伸模組在每個叢集中執行的代理程式。 此 Flux 叢集延伸模組會負責維護所需的狀態。 代理程式會以使用者定義的間隔輪詢 GitOps 存放庫,然後協調叢集狀態與 Git 存放庫宣告的狀態。

如需詳細資訊,請參閱教學課程:使用 GitOps 搭配 Flux v2 部署應用程式

CD 管線

CD 管線會由成功的 CI 組建自動觸發。 在此管線環境中,環境特定值會取代為先前發佈的範本,並使用這些值向 GitOps 存放庫發出新的提取要求。 此提取要求包含對一或多個 Kubernetes 叢集所需狀態的建議變更。 叢集管理員會檢閱提取要求,並核准合併至 GitOps 存放庫。 管線會等候提取要求合併,之後 Flux 會同步處理並套用狀態變更。

GitOps 存放庫

GitOps 存放庫代表叢集上所有環境目前預期的狀態。 對此存放庫所做的任何變更都會由每個叢集中的 Flux 服務挑選並部署。 叢集所需狀態的變更會顯示為提取要求,接著進行檢閱,最後在核准變更時合併這些要求。 這些提取要求包含部署範本的變更,以及所產生轉譯 Kubernetes 資訊清單的變更。 低層級轉譯的資訊清單允許更仔細的變更檢查,通常是在範本層級上看不到的變更。

GitOps 連接器

GitOps 連接器會在 Flux 代理程式與 GitOps 存放庫/CD 管線之間建立連線。 當變更套用至叢集時,Flux 會通知 GitOps 連接器每個階段的變更和執行的健康情況檢查。 此元件可用作配接器。 它會瞭解如何與 Git 存放庫通訊,以及更新 Git 認可狀態,讓同步處理進度顯示在 GitOps 存放庫中。 當部署完成 (成功或失敗) 時,連接器會通知 CD 管線繼續,讓管線可以執行部署後活動,例如整合測試。

Kubernetes 叢集

至少有一個已啟用 Azure Arc 的 Kubernetes 叢集或 Azure Kubernetes Service (AKS),可為應用程式所需的不同環境提供服務。 例如,單一叢集可以透過不同的命名空間來為開發和 QA 環境提供服務。 第二個叢集可提供更簡易的環境區隔和更精細的控制。

範例工作流程

身為應用程式的開發人員,Alice 可以:

  • 撰寫應用程式程式碼。
  • 決定如何在 Docker 容器中執行應用程式。
  • 定義在 Kubernetes 叢集中執行容器和相依服務的範本。

Alice 想要確定應用程式能夠在多個環境中執行,但她不知道每個環境的特定設定。

假設 Alice 想要變更應用程式,以改變應用程式部署範本中使用的 Docker 映像。

  1. Alice 會變更部署範本、將它推送至應用程式存放庫中名為 alice 的遠端分支,並開啟提取要求以針對 main 分支進行檢閱。

  2. Alice 要求她的小組檢閱變更。

    • PR 管線會執行驗證。
    • 成功執行 PR 管線和小組核准之後,即會合併變更。
  3. 然後 CI 管線會啟動並驗證 Alice 的變更,並成功完成驗證。

    • 此變更可安全地部署到叢集,而且成品會儲存至 CI 管線執行。
  4. 成功的 CI 管線執行會觸發 CD 管線。

    • CD 管線會挑選 Alice CI 管線執行所儲存的成品。
    • CD 管線會以環境專屬值取代範本,並針對 GitOps 存放庫中現有叢集狀態進行任何變更。
    • CD 管線會針對 GitOps 存放庫的實際執行分支建立提取要求,並對叢集狀態進行必要變更。
  5. Alice 的小組已檢閱並核准她的提取要求。

    • 變更會合併到對應至環境的目標分支。
  6. Flux 會在幾分鐘內注意到 GitOps 存放庫中的變更,並提取 Alice 的變更。

    • 由於 Docker 映像變更,因此應用程式 Pod 需要更新。
    • Flux 會將變更套用至叢集。
    • Flux 會透過 GitOps 連接器將部署狀態回報給 GitOps 存放庫。
  7. CD 管線會執行自動化測試,以確認新部署已成功完成,並如預期般運作。

    注意

    在鎖定為部署目標的其他環境中,您可以為下一個環境建立提取要求,然後重複步驟 4-7 以重複執行 CD 管線。 針對風險性部署或環境 (例如安全性相關變更或生產環境),此程序需要額外的核准。

  8. 當所有環境都收到成功部署時,管線就會完成。

下一步