基於事件匯流排EventBridge和分布式工作流程Argo Workflows,可以構建高效、快速、低成本的事件驅動自動化CI Pipeline,大幅簡化和加速應用交付過程。本文介紹如何構建基於事件驅動的自動化CI Pipeline流程。
前提條件
工作原理
基於事件驅動的自動化CI Pipeline,包含2部分:
-
基於Git事件的觸發,代碼提交到Git倉庫時,觸發相應的事件。
-
CI系統運行構建前的測試,構建Docker鏡像,並推送至鏡像倉庫。
鏡像構建成功後,可使用CD系統(如ACK One GitOps)將新的Image Tag同步到Kubernetes叢集中。
在本實踐中,事件驅動方案採用了在可用性、易用性、安全性、可擴充性等多方面具有優勢的事件匯流排EventBridge,CI部分基於CNCF畢業專案Argo Workflows來構建。工作流程叢集全託管Argo Workflows,可提升穩定性和可觀測性,提供營運能力,協助您實現更大規模、具有更快的運行速度和更低成本的CI Pipeline。
-
使用者向Git倉庫提交代碼。
-
EventBridge根據配置的規則,捕獲Git事件並將其傳遞給ACK One工作流程叢集,從而觸發CI工作流程的執行。
-
基於ACK One工作流程叢集的CI工作流程構建Docker Image,並推送至鏡像倉庫中。之後可通過GitOps自動同步相應鏡像變化至ACK叢集。
步驟一:在Argo工作流程叢集中準備CI環境
-
建立ACR EE訪問憑證並掛載NAS儲存卷。具體操作,請參見基於工作流程叢集構建Golang專案的CI Pipeline中的步驟一和步驟二。
說明請確保命名空間與Workflow資源保持一致。
-
Apps Code Repo樣本為echo-server專案,請將其Fork到您的GitHub帳號下,並參考在CI Pipeline中Clone私人Git倉庫來修改WorkflowTemplate。
步驟二:使用EventBridge實現Git事件驅動CI Pipeline
-
事件匯流排EventBridge與GitHub進行整合對接。具體操作,請參見GitHub整合。
-
配置事件規則(可選),以下為本樣本配置內容。詳細配置事件規則的方式,請參見管理事件規則。
-
事件模式:如下設定為只觸發來自
release-v1分支的變更。{ "source": [ "github.event" ], "data": { "body": { "ref": [ "refs/heads/release-v1" ] } } } -
配置事件目標。
-
服务类型:選擇Container ServiceKubernetes。
-
叢集設定檔 KubeConfig:輸入工作流程叢集專用網路訪問的KubeConfig。
-
YAML配置:本樣本選擇模板。
-
变量:增加
workflowName,配置事件ID。{ "workflowName": "$.id" } -
模板:填入Workflow CI CR。以下樣本僅供參考,請根據您的實際資訊構建CR。
重要資源配置的要求是必須明確設定
name和namespace,不能使用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 -
網路訪問:推薦使用專用網路,選擇工作流程叢集的VPC,交換器和安全性群組。
-
-
-
根據上述配置,當您在GitHub倉庫的
release-v1分支上進行代碼修改並提交時,該操作會觸發自動化流程,您可以通過以下方式驗證。-
查看事件軌跡。
- 登入事件匯流排EventBridge控制台,在左側導覽列,單擊事件匯流排。
-
單擊對應事件匯流排名稱,在左側導覽列,單擊事件追蹤。
-
進入事件追蹤頁面,可查看對應事件軌跡。
事件軌跡詳情中,事件 ID 為
b91299ae-355d-4f66-ac53-8d84e5d84b97,事件類型為eventbridge:Events:HTTPEvent,匯流排名稱為 ci-test,事件來源為 github.event。在事件投遞地區,規則 ttt 成功將事件投遞至目標https://8.217.97.153:6443,投遞狀態為成功,投遞耗時 59 毫秒,投遞響應為[200]NoMessage。
-
查看建立的Workflow的執行拓撲。
在工作流程叢集查看建立的Workflow的執行拓撲。具體操作,請參見開啟Argo Server訪問工作流程叢集。
Workflow 名稱為
ci-go-v1-eb-3999580c-1ee4-4e10-a75b-af6e8eddccde,DAG 執行拓撲依次為 git-checkout-pr(已成功)、run-test(已成功)、build-push-image(運行中)。
-