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

本文涉及的产品
函数计算FC,每月15万CU 3个月
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 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


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

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

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

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。   相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
24天前
|
人工智能 自然语言处理 JavaScript
Agent-E:基于 AutoGen 代理框架构建的 AI 浏览器自动化系统
Agent-E 是一个基于 AutoGen 代理框架构建的智能自动化系统,专注于浏览器内的自动化操作。它能够执行多种复杂任务,如填写表单、搜索和排序电商产品、定位网页内容等,从而提高在线效率,减少重复劳动。本文将详细介绍 Agent-E 的功能、技术原理以及如何运行该系统。
77 5
Agent-E:基于 AutoGen 代理框架构建的 AI 浏览器自动化系统
|
9天前
|
Serverless 决策智能 UED
构建全天候自动化智能导购助手:从部署者的视角审视Multi-Agent架构解决方案
在构建基于多代理系统(Multi-Agent System, MAS)的智能导购助手过程中,作为部署者,我体验到了从初步接触到深入理解再到实际应用的一系列步骤。整个部署过程得到了充分的引导和支持,文档详尽全面,使得部署顺利完成,未遇到明显的报错或异常情况。尽管初次尝试时对某些复杂配置环节需反复确认,但整体流程顺畅。
|
14天前
|
缓存 监控 安全
公司电脑监控软件的 Gradle 构建自动化优势
在数字化办公环境中,公司电脑监控软件面临代码更新频繁、依赖管理和构建复杂等挑战。Gradle 构建自动化工具以其强大的依赖管理、灵活的构建脚本定制及高效的构建缓存与增量构建特性,显著提升了软件开发效率和质量,支持软件的持续更新与优化,满足企业对员工电脑使用情况的监控与管理需求。
27 3
|
26天前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
48 9
|
24天前
|
运维 jenkins Java
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
39 5
|
1月前
|
监控 安全 测试技术
在实施自动化和持续集成的过程中,如何确保代码的安全性和合规性
在自动化和持续集成中,确保代码安全与合规至关重要。措施包括集成自动化安全工具、执行自动化合规检查、进行代码质量与安全检测、评估开源代码安全、实施基础设施即代码的安全标准、采用多层防御策略、加强安全教育与文化建设、使用合规性检测工具及许可证合规分析等,共同提升代码安全性与合规水平。
|
2月前
|
JavaScript 调度
Vue事件总线(EventBus)使用指南:详细解析与实战应用
Vue事件总线(EventBus)使用指南:详细解析与实战应用
103 1
|
4月前
|
JavaScript
Vue学习之--------全局事件总线(2022/8/22)
这篇文章介绍了Vue中全局事件总线(GlobalEventBus)的概念和使用方法,它允许不同组件之间进行通信。文章通过图解和代码实例详细解释了如何安装全局事件总线、在组件中接收和提供数据,以及如何在组件销毁前解绑事件,以避免潜在的内存泄漏问题。
Vue学习之--------全局事件总线(2022/8/22)
|
7月前
|
JavaScript
解释 Vue 的事件总线和 emits 属性。
解释 Vue 的事件总线和 emits 属性。
87 3
|
7月前
|
JavaScript
在Vue中,如何使用事件总线来传递数据和触发事件?
在Vue中,如何使用事件总线来传递数据和触发事件?
114 0

热门文章

最新文章