全部產品
Search
文件中心

Container Service for Kubernetes:基於EventBridge的事件驅動CI Pipeline

更新時間:Jul 24, 2024

基於事件匯流排EventBridge和分布式工作流程Argo Workflows,可以構建高效、快速、低成本的事件驅動自動化CI Pipeline,大幅簡化和加速應用交付過程。本文介紹如何構建基於事件驅動的自動化CI Pipeline流程。

前提條件

概述

基於事件驅動的自動化CI Pipeline,包含2部分:

  1. 基於Git事件的觸發,代碼提交到Git倉庫時,觸發相應的事件。

  2. CI系統運行構建前的測試,構建Docker鏡像,並推送至鏡像倉庫。

鏡像構建成功後,可使用CD系統(如ACK One GitOps)將新的Image Tag同步到Kubernetes叢集中。

在本實踐中,事件驅動方案採用了在可用性、易用性、安全性、可擴充性等多方面具有優勢事件匯流排EventBridge,CI部分基於CNCF畢業專案Argo Workflows來構建。ACK One工作流程叢集全託管Argo Workflows,提升了穩定性、可觀測等效能,提供營運能力,協助您實現更大規模、具有更快的運行速度和更低成本的CI Pipeline。

  1. 使用者向Git倉庫提交代碼。

  2. EventBridge根據配置的規則,捕獲Git事件並將其傳遞給ACK One工作流程叢集,從而觸發CI工作流程的執行。

  3. 基於ACK One工作流程叢集的CI工作流程構建Docker Image,並推送至鏡像倉庫中。之後可通過GitOps自動同步相應鏡像變化至ACK叢集。

步驟一:在ACK One工作流程叢集中準備CI環境

  1. 建立ACR EE訪問憑證並掛載NAS儲存卷。具體操作,請參見基於工作流程叢集構建Golang專案的CI Pipeline中的步驟一步驟二

    說明

    請確保命名空間與Workflow資源保持一致。

  2. Apps Code Repo樣本為echo-server專案,請將其Fork到您自己的GitHub帳號下,並參考在CI Pipeline中Clone私人Git倉庫來修改WorkflowTemplate。

步驟二:使用EventBridge實現Git事件驅動CI Pipeline

  1. 建立自訂事件匯流排

  2. 事件匯流排EventBridge與GitHub進行整合對接。具體操作,請參見GitHub整合

  3. 配置事件規則(可選),以下為本樣本配置內容。詳細配置事件規則的方式,請參見管理事件規則

    1. 事件模式:如下設定為只觸發來自release-v1分支的變更。

      {
          "source": [
              "github.event"
          ],
          "data": {
              "body": {
                  "ref": [
                      "refs/heads/release-v1"
                  ]
              }
          }
      }
      
    2. 配置事件目標。

      1. 服務類型:選擇Container ServiceKubernetes

      2. 叢集設定檔 KubeConfig:輸入ACK One工作流程叢集的KubeConfig。

      3. YAML配置:本樣本選擇模板

      4. 變數:增加workflowName,配置事件ID。

        {
        	"workflowName": "$.id"
        }
      5. 模板:填入Workflow CI CR。以下樣本僅供參考,請根據您的實際資訊構建CR。

        重要

        資源配置的要求是必須明確設定namenamespace,不能使用generateName。如果資源屬於預設命名空間default,也必須聲明。

        apiVersion: argoproj.io/v1alpha1
        kind: Workflow
        metadata:
          name: ci-go-v1-eb-${workflowName}
          namespace: default
          labels:
            workflows.argoproj.io/workflow-template: ackone-ci
        spec:
          arguments:
            parameters:
            - name: repo_url
              value: https://github.com/ivan-cai/echo-server.git
            - name: repo_name
              value: echo-server
            - name: target_branch
              value: release-v1
            - name: container_image
              value: "YOUR-IMAGE-REGISTRY-ADDRESS"     # 容器鏡像庫的地址,請根據您的實際資訊替換.
            - name: container_tag
              value: "v1.0.0"
            - name: dockerfile
              value: ./Dockerfile
            - name: enable_suffix_commitid
              value: "true"
            - name: enable_test
              value: "true"
          workflowTemplateRef:
            name: ci-go-v1
            clusterScope: true
      6. 網路訪問:本樣本選擇公網

  4. 根據上述配置,當您在GitHub倉庫的release-v1分支上進行代碼修改並提交時,該操作會觸發自動化流程,您可以通過以下方式驗證。

    1. 查看事件軌跡。

      1. 登入事件匯流排EventBridge控制台,在左側導覽列,單擊事件匯流排
      2. 單擊對應事件匯流排名稱,在左側導覽列,單擊事件追蹤

      3. 進入事件追蹤頁面,可查看對應事件軌跡。

        image

    2. 查看建立的Workflow的執行拓撲。

      在ACK One工作流程叢集查看建立的Workflow的執行拓撲。具體操作,請參見開啟Argo Server訪問工作流程叢集

      image