使用 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管線時進行閘道處理。 此管線會執行基本品質網關,例如應用程式程序代碼上的 Linting 和單元測試。 管線會測試用於部署至 Kubernetes 環境的應用程式和lints Dockerfiles 和 Helm 樣本。 應該建置和測試 Docker 映射,但不應推送。 保持管線持續時間相對較短,以允許快速反覆運算。

CI 管線

應用程式 CI 管線會執行所有 PR 管線步驟,並展開測試和部署檢查。 管線可以針對 main 的每個認可執行,或者可以使用一組認可定期執行。

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

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

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

Flux 叢集擴充功能

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

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

CD 管線

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

GitOps 存放庫

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

GitOps 連接器

GitOps 連線 or 會建立 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 連線 or 將部署狀態回報回 GitOps 存放庫。
  7. CD 管線會執行自動化測試,以確認新部署成功完成,並如預期般運作。

    注意

    針對以部署為目標的其他環境,CD 管線會建立下一個環境的提取要求來逐一查看,並重複步驟 4-7。 此程式有許多需要額外核准的風險性部署或環境,例如安全性相關變更或生產環境。

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

下一步