基于EventBridge的事件驅(qū)動(dòng)CI Pipeline
基于事件總線EventBridge和分布式工作流Argo Workflows,可以構(gòu)建高效、快速、低成本的事件驅(qū)動(dòng)自動(dòng)化CI Pipeline,大幅簡(jiǎn)化和加速應(yīng)用交付過(guò)程。本文介紹如何構(gòu)建基于事件驅(qū)動(dòng)的自動(dòng)化CI Pipeline流程。
前提條件
已授予RAM用戶AliyunAdcpFullAccess權(quán)限。具體操作,請(qǐng)參見(jiàn)為RAM用戶授權(quán)。
概述
基于事件驅(qū)動(dòng)的自動(dòng)化CI Pipeline,包含2部分:
基于Git事件的觸發(fā),代碼提交到Git倉(cāng)庫(kù)時(shí),觸發(fā)相應(yīng)的事件。
CI系統(tǒng)運(yùn)行構(gòu)建前的測(cè)試,構(gòu)建Docker鏡像,并推送至鏡像倉(cāng)庫(kù)。
鏡像構(gòu)建成功后,可使用CD系統(tǒng)(如ACK One GitOps)將新的Image Tag同步到Kubernetes集群中。
在本實(shí)踐中,事件驅(qū)動(dòng)方案采用了在可用性、易用性、安全性、可擴(kuò)展性等多方面具有優(yōu)勢(shì)的事件總線EventBridge,CI部分基于CNCF畢業(yè)項(xiàng)目Argo Workflows來(lái)構(gòu)建。ACK One工作流集群全托管Argo Workflows,提升了穩(wěn)定性、可觀測(cè)等性能,提供運(yùn)維能力,幫助您實(shí)現(xiàn)更大規(guī)模、具有更快的運(yùn)行速度和更低成本的CI Pipeline。
用戶向Git倉(cāng)庫(kù)提交代碼。
EventBridge根據(jù)配置的規(guī)則,捕獲Git事件并將其傳遞給ACK One工作流集群,從而觸發(fā)CI工作流的執(zhí)行。
基于ACK One工作流集群的CI工作流構(gòu)建Docker Image,并推送至鏡像倉(cāng)庫(kù)中。之后可通過(guò)GitOps自動(dòng)同步相應(yīng)鏡像變化至ACK集群。
步驟一:在ACK One工作流集群中準(zhǔn)備CI環(huán)境
創(chuàng)建ACR EE訪問(wèn)憑證并掛載NAS存儲(chǔ)卷。具體操作,請(qǐng)參見(jiàn)基于工作流集群構(gòu)建Golang項(xiàng)目的CI Pipeline中的步驟一和步驟二。
說(shuō)明請(qǐng)確保命名空間與Workflow資源保持一致。
Apps Code Repo示例為echo-server項(xiàng)目,請(qǐng)將其Fork到您自己的GitHub賬號(hào)下,并參考在CI Pipeline中Clone私有Git倉(cāng)庫(kù)來(lái)修改WorkflowTemplate。
步驟二:使用EventBridge實(shí)現(xiàn)Git事件驅(qū)動(dòng)CI Pipeline
事件總線EventBridge與GitHub進(jìn)行集成對(duì)接。具體操作,請(qǐng)參見(jiàn)GitHub集成。
配置事件規(guī)則(可選),以下為本示例配置內(nèi)容。詳細(xì)配置事件規(guī)則的方式,請(qǐng)參見(jiàn)管理事件規(guī)則。
事件模式:如下設(shè)置為只觸發(fā)來(lái)自
release-v1
分支的變更。{ "source": [ "github.event" ], "data": { "body": { "ref": [ "refs/heads/release-v1" ] } } }
配置事件目標(biāo)。
服務(wù)類型:選擇容器服務(wù)Kubernetes。
集群配置文件 KubeConfig:輸入ACK One工作流集群的KubeConfig。
YAML配置:本示例選擇模板。
變量:增加
workflowName
,配置事件ID。{ "workflowName": "$.id" }
模板:填入Workflow CI CR。以下示例僅供參考,請(qǐng)根據(jù)您的實(shí)際信息構(gòu)建CR。
重要資源配置的要求是必須明確設(shè)置
name
和namespace
,不能使用generateName
。如果資源屬于默認(rèn)命名空間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" # 容器鏡像庫(kù)的地址,請(qǐng)根據(jù)您的實(shí)際信息替換. - 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
網(wǎng)絡(luò)訪問(wèn):本示例選擇公網(wǎng)。
根據(jù)上述配置,當(dāng)您在GitHub倉(cāng)庫(kù)的
release-v1
分支上進(jìn)行代碼修改并提交時(shí),該操作會(huì)觸發(fā)自動(dòng)化流程,您可以通過(guò)以下方式驗(yàn)證。查看事件軌跡。
- 登錄事件總線EventBridge控制臺(tái),在左側(cè)導(dǎo)航欄,單擊事件總線。
單擊對(duì)應(yīng)事件總線名稱,在左側(cè)導(dǎo)航欄,單擊事件追蹤。
進(jìn)入事件追蹤頁(yè)面,可查看對(duì)應(yīng)事件軌跡。
查看新建的Workflow的執(zhí)行拓?fù)洹?/p>
在ACK One工作流集群查看新建的Workflow的執(zhí)行拓?fù)洹>唧w操作,請(qǐng)參見(jiàn)開(kāi)啟Argo Server訪問(wèn)工作流集群。