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

简介: ACK One Serverless Argo工作流和EventBridge简单快速、高效、低成本地交付您的应用,为您实现代码提交即构建/交付的自动化CI系统。

【阅读原文】戳:代码提交即部署: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资源一致)。

 

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

 

 

下方是对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/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

https://help.aliyun.com/zh/eventbridge/product-overview/what-is-eventbridge?spm=a2c4g.11186623.0.0.29ec37a91hc9YA

 

[3] ACK One Serverless Argo工作流集群

https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/overview-12?spm=a2c4g.11186623.0.0.59436218pN6PWS

 

[4] ACK One GitOps

https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/gitops-overview?spm=a2c4g.11186623.0.0.728e726dPq42Vh

 

[5] 基于工作流集群的CI Pipeline

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?spm=a2c4g.11186623.0.0.7f7f380cCGMsib

 

[6] BuildKit Cache

https://github.com/moby/buildkit?tab=readme-ov-file#cache

 

[7] ACK One工作流集群的CI工作流

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?spm=a2c4g.11186623.0.0.7f7f380cCGMsib

 

[8] echo-server项目

https://github.com/AliyunContainerService/echo-server

 

[9] CI Pipeline中Clone私有仓库

https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/use-cases/clone-private-git-repository-in-ci-pipeline?spm=a2c4g.11186623.0.0.7d6d380cXVeHdk

 

[10] 工作流控制台

https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/enable-argo-server-for-a-workflow-cluster?spm=a2c4g.11186623.0.0.448d9c2bjTGRzW


我们是阿里巴巴云计算和大数据技术幕后的核心技术输出者。

欢迎关注 “阿里云基础设施”同名微信微博知乎

获取关于我们的更多信息~

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3月前
|
敏捷开发 测试技术 API
测试金字塔:构建高效自动化测试策略的基石
测试金字塔:构建高效自动化测试策略的基石
308 116
|
3月前
|
设计模式 前端开发 测试技术
告别脆弱:构建稳定UI自动化测试的3个核心策略
告别脆弱:构建稳定UI自动化测试的3个核心策略
385 113
|
3月前
|
JSON 监控 API
n8n错误处理全攻略:构建稳定可靠的自动化工作流
在n8n自动化工作流中,错误是提升系统可靠性的关键。本文详解常见错误类型、节点级与全局处理机制,结合重试、熔断、补偿事务等高级模式,助您构建稳定、可维护的生产级自动化流程。
|
4月前
|
人工智能 Ubuntu 前端开发
Dify部署全栈指南:AI从Ubuntu配置到HTTPS自动化的10倍秘籍
本文档介绍如何部署Dify后端服务及前端界面,涵盖系统环境要求、依赖安装、代码拉取、环境变量配置、服务启动、数据库管理及常见问题解决方案,适用于开发与生产环境部署。
869 1
|
3月前
|
测试技术 API 数据库
测试金字塔:构建高效自动化测试策略的基石
测试金字塔:构建高效自动化测试策略的基石
329 114
|
3月前
|
弹性计算 人工智能 前端开发
在阿里云ECS上部署n8n自动化工作流:U2实例实战
本文介绍如何在阿里云ECS的u2i/u2a实例上部署开源工作流自动化平台n8n,利用Docker快速搭建并配置定时任务,实现如每日抓取MuleRun新AI Agent并推送通知等自动化流程。内容涵盖环境准备、安全组设置、实战案例与优化建议,助力高效构建低维护成本的自动化系统。
734 5
|
3月前
|
Java 项目管理 Maven
Maven项目管理与构建自动化完全指南
Maven彻底改变了Java项目管理方式,通过POM模型、依赖管理和标准化构建流程,大幅提升开发效率。本文深入解析其核心概念、多模块管理、私服搭建及与Spring Boot、Docker等现代技术栈的集成实践,助力开发者实现高效、规范的项目构建与团队协作。
Maven项目管理与构建自动化完全指南
|
3月前
|
数据采集 运维 监控
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
本文系统解析爬虫与自动化核心技术,涵盖HTTP请求、数据解析、分布式架构及反爬策略,结合Scrapy、Selenium等框架实战,助力构建高效、稳定、合规的数据采集系统。
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南