基于EventBridge的事件驱动CI Pipeline

基于事件总线EventBridge和分布式工作流Argo Workflows,可以构建高效、快速、低成本的事件驱动自动化CI Pipeline,大幅简化和加速应用交付过程。本文介绍如何构建基于事件驱动的自动化CI Pipeline流程。

前提条件

概述

基于事件驱动的自动化CI Pipeline,包含2部分:

  1. 基于Git事件的触发,代码提交到Git仓库时,触发相应的事件。

  2. CI系统运行构建前的测试,构建Docker镜像,并推送至镜像仓库。

镜像构建成功后,可使用CD系统(如ACK One GitOps)将新的Image Tag同步到Kubernetes集群中。

image

在本实践中,事件驱动方案采用了在可用性、易用性、安全性、可扩展性等多方面具有优势事件总线EventBridge,CI部分基于CNCF毕业项目Argo Workflows来构建。ACK One工作流集群全托管Argo Workflows,提升了稳定性、可观测等性能,提供运维能力,帮助您实现更大规模、具有更快的运行速度和更低成本的CI Pipeline。

image
  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. 服务类型:选择容器服务Kubernetes

      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