【阅读原文】戳:代码提交即部署:Argo Workflows与EventBridge构建自动化CI
Argo Workflows[1]是用于在Kubernetes上编排Job的开源的云原生工作流引擎。可以轻松自动化和管理 Kubernetes上的复杂工作流程。适用于各种场景,包括定时任务、机器学习、ETL和数据分析、模型训练、数据流pipline、CI/CD等。
Kubernetes Jobs只提供基础的任务执行,但是无法定义步骤依赖关系和顺序、缺乏工作流模版、没有可视化界面,也不支持工作流级别的错误处理等,对于批处理、数据处理、科学计算、持续集成等业务场景,Kubernetes Job无法胜任。
Argo Workflows作为CNCF的毕业项目,已被使用在多种场景,持续集成(CI)是其一个重要应用领域。
持续集成(CI)是软件开发生命周期重要组成部分,好的CI系统可以大幅提升您的交付效率。基于阿里云事件总线EventBridge[2]和ACK One Serverless Argo工作流集群[3](Argo Workflows)可以构建基于事件驱动的自动化CI Pipeline,简单快速、高效、低成本地交付您的应用,实现代码提交即构建、交付。
事件总线EventBridge是阿里云提供的一款无服务器事件总线服务,支持阿里云服务、自定义应用、SaaS应用以标准化、中心化的方式接入,并能够以标准化的CloudEvents 1.0协议在这些应用之间路由事件,帮助您轻松构建松耦合、分布式的事件驱动架构。使用EventBridge作为事件驱动引擎,有以下优势:
1. 可用性:高吞吐量的事件发布和消费;自动弹性伸缩轻松应对突发流量;同地域容灾部署,数据可靠性强;多地域部署,网络延迟低。
2. 易用性:全托管服务,免部署、免运维;支持广泛事件源,包括阿里云官方事件源和自定义事件源;无缝迁移上云,完全兼容CloudEvents 1.0。
3. 安全性:支持阿里云账号向RAM用户授权、跨云账号授权、为不同的RAM用户授予不同的访问权限、HTTP/HTTPS协议。
事件驱动的自动化CI Pipeline
ACK One全托管Argo Workflows,提升了其性能、稳定性、可观测、运维能力等。本文将介绍如何基于EventBridge和ACK One Serverless Argo工作流集群构建事件驱动的自动化CI Pipeline,实现基于Git事件驱动CI系统构建和推送Docker Image及运行构建前的测试等。
基于事件驱动的自动化CI Pipeline,包含2部分:
1. 基于Git事件的事件驱动;
2. CI系统构建Docker Image及运行构建前的测试等。
镜像构建成功后,可使用CD系统(如ACK One GitOps[4])同步新Image tag到K8s集群中。
EventBridge包含事件源、事件总线、事件规则和事件目标:
• 事件源:将阿里云服务、自定义应用等应用程序产生的事件消息发布到事件总线。本文是对接GitHub。
• 事件总线:存储接收到的事件消息,并根据事件规则将事件消息路由到事件目标。
• 事件目标:事件消费者。本文是ACK One Serverless Argo工作流集群。
基于工作流集群的CI Pipeline[5]主要包含3个步骤:Git代码的Clone和切换分支、运行Go项目的测试用例、构建和推送镜像到ACR EE。并且使用BuildKit Cache[6]来加速镜像构建。
基于Git事件驱动的CI主要步骤如下:
1. 用户向Git仓库提交代码;
2. EventBridge根据配置的规则,Git事件触发其向 ACK One工作流集群提交CI工作流;
3. 基于ACK One工作流集群的CI工作流[7]来构建 Docker Image,并推送至镜像仓库(ACR EE)中。之后可通过GitOps自动同步相应镜像变化至ACK集群。
准备Argo工作流集群和CI环境
1. 创建工作流集群、ACR EE、NAS文件系统。
2. 在工作流集群中准备CI工作流所需的ACR EE访问凭证和NAS存储卷,详情请参见下方基于工作流集群的CI Pipeline链接的步骤一和步骤二。(注意namespace需要和Workflow资源一致)。
Apps Code Repo示例为echo-server项目[8],如您使用该示例代码,需要Fork到您自己Git仓库,若为私有仓库,则可参考CI Pipeline中Clone私有仓库[9]来修改WorkflowTemplate。
使用EventBridge实现Git事件驱动CI Pipeline
下方是对echo-server项目的指定分支(release-v1)的Git事件驱动的CI Pipeline配置步骤。
1)开通事件总线EventBridge并授权
2)创建自定义总线
https://help.aliyun.com/zh/eventbridge/user-guide/manage-custom-event-buses#section-sfl-pcs-6rh
3)集成Github
https://help.aliyun.com/zh/eventbridge/use-cases/integrate-github
4)编辑事件规则(可选)
• 事件模式:如下设置为只触发来自于release-v1分支的变更。
{ "source": [ "github.event" ], "data": { "body": { "ref": [ "refs/heads/release-v1" ] } } }
5)事件目标:
• 服务类型:选择容器服务Kubernetes
• 集群配置文件KubeConfig:输入ACK One工作流集群的KubeConfig
• YAML配置:模板
• 变量:增加workflowName,如下配置为事件id
{ "workflowName": "$.id" }
6)模板:填入Workflow CI CR
• 必须要设置name和namespace,不可使用 generateName,要显示声明default namespace。
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: "test-registry.cn-hongkong.cr.aliyuncs.com/acs/echo-server" - 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
提交代码自动构建和推送镜像
1. 提交github代码,触发自动化流程(按上述配置,需修改release-v1分支代码方可触发)。
a. 事件追踪中可查看事件轨迹
2. 在ACK One工作流集群中或者工作流控制台[10]查看新建的Workflow的执行拓扑。
3. 可在ACR EE中查看已推送镜像。
总结
ACK One Serverless Argo工作流作为全托管的Argo工作流服务,可以帮助您实现更大规模、具有更快的运行速度、及更低成本的CI Pipeline。结合在可用性、易用性、安全性等多方面具有优势的事件总线EventBridge,简单快速、高效、低成本地交付您的应用,为您实现代码提交即构建/交付的自动化CI系统。欢迎加入ACK One客户交流钉钉与我们一同交流。(钉钉群号:35688562)
相关链接:
[1] Argo Workflows
https://argo-workflows.readthedocs.io/en/latest/
[2] 事件总线EventBridge
[3] ACK One Serverless Argo工作流集群
[4] ACK One GitOps
[5] 基于工作流集群的CI Pipeline
[6] BuildKit Cache
https://github.com/moby/buildkit?tab=readme-ov-file#cache
[7] ACK One工作流集群的CI工作流
[8] echo-server项目
https://github.com/AliyunContainerService/echo-server
[9] CI Pipeline中Clone私有仓库
[10] 工作流控制台
我们是阿里巴巴云计算和大数据技术幕后的核心技术输出者。
获取关于我们的更多信息~