专栏名称: 阿里云云原生
发布云原生技术最新资讯、汇集云原生技术最全内容,定期举办云原生活动、直播,阿里产品及用户最佳实践发布。与你并肩探索云原生技术点滴,分享你需要的云原生内容。
目录
相关文章推荐
百姓关注  ·  刚刚!鹿晗工作室紧急发声! ·  6 小时前  
贵州日报  ·  短短3年,间谍王某某,疯狂跳槽窃密! ·  昨天  
阿里开发者  ·  LLM 联网搜索,到底是咋回事? ·  昨天  
百姓关注  ·  巨头宣布:永不合作! ·  3 天前  
51好读  ›  专栏  ›  阿里云云原生

代码提交即部署:Argo Workflows 与 EventBridge 构建自动化 CI

阿里云云原生  · 公众号  ·  · 2024-07-13 09:00

正文

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 作为事件驱动引擎,有以下优势:
  • 可用性: 高吞吐量的事件发布和消费;自动弹性伸缩轻松应对突发流量;同地域容灾部署,数据可靠性强;多地域部署,网络延迟低。
  • 易用性: 全托管服务,免部署、免运维;支持广泛事件源,包括阿里云官方事件源和自定义事件源;无缝迁移上云,完全兼容 CloudEvents 1.0。
  • 安全性: 支持阿里云账号向 RAM 用户授权、跨云账号授权、为不同的 RAM 用户授予不同的访问权限、HTTP/HTTPS 协议。

事件驱动的自动化 CI Pipeline




Cloud Native

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 环境




Cloud Native

1. 创建工作流集群、ACR EE、NAS 文件系统。
2. 在工作流集群中准备 CI 工作流所需的 ACR EE 访问凭证和 NAS 存储卷,详情请参见下方基于工作流集群的 CI Pipeline 链接的步骤一和步骤二。(注意 namespace 需要和 Workflow 资源一致)。
https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/use-cases/building-a-ci-pipeline-of-golang-project-based-on-workflow-cluster

Apps Code Repo 示例为 echo-server 项目 [ 8] ,如您使用该示例代码,需要 Fork 到您自己 Git 仓库,若为私有仓库,则可参考 CI Pipeline 中 Clone 私有仓库 [ 9] 来修改 WorkflowTemplate。


使用 EventBridge

实现 Git 事件驱动 CI Pipeline

Cloud Native

下方是对 echo-server 项目的指定分支(release-v1)的 Git 事件驱动的 CI Pipeline 配置步骤。

1)开通事件总线 EventBridge 并授权

https://help.aliyun.com/zh/eventbridge/getting-started/activate-eventbridge-and-grant-permissions-to-a-ram-user

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/v1alpha1kind: Workflowmetadata:  name: ci-go-v1-eb-${workflowName}  namespace: default  labels:    workflows.argoproj.io/workflow-template: ackone-cispec:  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

提交代码自动构建和推送镜像




Cloud Native

1. 提交 github 代码,触发自动化流程(按上述配置,需修改 release-v1 分支代码方可触发)。
    1. 事件追踪中可查看事件轨迹

2. 在 ACK One 工作流集群中或者工作流控制台 [ 10] 查看新建的 Workflow 的执行拓扑。

3. 可在 ACR EE 中查看已推送镜像。

总结







请到「今天看啥」查看全文