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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 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代码程序上传并在云端以容器化的构建、传输和运行。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1天前
|
存储 Shell Linux
快速上手基于 BaGet 的脚本自动化构建 .net 应用打包
本文介绍了如何使用脚本自动化构建 `.net` 应用的 `nuget` 包并推送到指定服务仓库。首先概述了 `BaGet`——一个开源、轻量级且高性能的 `NuGet` 服务器,支持多种存储后端及配置选项。接着详细描述了 `BaGet` 的安装、配置及使用方法,并提供了 `PowerShell` 和 `Bash` 脚本实例,用于自动化推送 `.nupkg` 文件。最后总结了 `BaGet` 的优势及其在实际部署中的便捷性。
25 10
|
2天前
|
运维 Prometheus 监控
自动化运维工具链的构建与实践
【9月更文挑战第4天】在现代IT运维管理中,自动化工具链的搭建是提升效率、保障稳定性的关键。本文将通过一个实际案例,展示如何从零开始构建一套高效的自动化运维体系,涵盖从监控、部署到故障处理的完整流程,并分享实践中的经验教训和成效分析。
17 4
|
7天前
|
测试技术 API 开发者
Python 魔法:打造你的第一个天气查询小工具自动化测试框架的构建与实践
【8月更文挑战第31天】在这篇文章中,我们将一起踏上编程的奇妙旅程。想象一下,只需几行代码,就能让计算机告诉你明天是否要带伞。是的,你没有听错,我们将用Python这把钥匙,解锁天气预报的秘密。不论你是编程新手还是想拓展技能的老手,这篇文章都会为你带来新的视角和灵感。所以,拿起你的键盘,让我们一起创造属于自己的天气小工具吧!
|
7天前
|
C# 开发者 Windows
WPF遇上Office:一场关于Word与Excel自动化操作的技术盛宴,从环境搭建到代码实战,看WPF如何玩转文档处理的那些事儿
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的重要组件,以其强大的图形界面和灵活的数据绑定功能著称。本文通过具体示例代码,介绍如何在 WPF 应用中实现 Word 和 Excel 文档的自动化操作,包括文档的读取、编辑和保存等。首先创建 WPF 项目并设计用户界面,然后在 `MainWindow.xaml.cs` 中编写逻辑代码,利用 `Microsoft.Office.Interop` 命名空间实现 Office 文档的自动化处理。文章还提供了注意事项,帮助开发者避免常见问题。
25 0
|
7天前
|
运维 监控 jenkins
自动化运维实践:构建高效的CI/CD流程
【8月更文挑战第31天】在软件开发的海洋中,持续集成和持续交付(CI/CD)是推动现代开发实践的强大潮流。本文将带你潜入这股潮流之下,探索如何构建一个高效且灵活的自动化运维流程,以提升软件交付的速度与质量。我们将从基础工具的选择到流程设计,再到实际操作的技巧,逐步展开讨论,并结合代码示例,使理论与实践紧密结合。
|
7天前
|
Java 测试技术 容器
从零到英雄:Struts 2 最佳实践——你的Web应用开发超级变身指南!
【8月更文挑战第31天】《Struts 2 最佳实践:从设计到部署的全流程指南》深入介绍如何利用 Struts 2 框架从项目设计到部署的全流程。从初始化配置到采用 MVC 设计模式,再到性能优化与测试,本书详细讲解了如何构建高效、稳定的 Web 应用。通过最佳实践和代码示例,帮助读者掌握 Struts 2 的核心功能,并确保应用的安全性和可维护性。无论是在项目初期还是后期运维,本书都是不可或缺的参考指南。
15 0
|
7天前
|
jenkins 测试技术 持续交付
自动化测试框架的构建与实践
【8月更文挑战第31天】本文将引导你了解自动化测试框架的重要性,并深入浅出地展示如何搭建和实施一个有效的自动化测试环境。通过实际案例,我们将一起探索自动化测试的“魔力”,解锁软件质量保障的新技能。
|
7天前
|
前端开发 Java UED
JSF遇上Material Design:一场视觉革命,如何让传统Java Web应用焕发新生?
【8月更文挑战第31天】在当前的Web开发领域,用户体验和界面美观性至关重要。Google推出的Material Design凭借其独特的动画、鲜艳的颜色和简洁的布局广受好评。将其应用于JavaServer Faces(JSF)项目,能显著提升应用的现代感和用户交互体验。本文介绍如何通过PrimeFaces等组件库在JSF应用中实现Material Design风格,包括添加依赖、使用组件及响应式布局等步骤,为用户提供美观且功能丰富的界面。
14 0
|
7天前
|
测试技术 持续交付 开发者
自动化测试之美:从零开始构建Python测试脚本
【8月更文挑战第31天】在软件开发的海洋中,自动化测试是一艘能够引领我们高效航行的帆船。本文将带领读者踏上一段探索性旅程,深入浅出地介绍如何使用Python语言编写自动化测试脚本。从搭建测试环境到编写实用测试案例,我们将一步步解锁软件测试的秘密,确保代码质量和项目成功。让我们启航吧!
|
7天前
|
前端开发 Devops 持续交付
【前端自动化新高度】Angular与Azure DevOps完美结合:从零构建持续集成与持续部署的全自动流水线,提升开发效率与软件交付质量!
【8月更文挑战第31天】Angular作为领先的前端框架,以强大功能和灵活性深受开发者喜爱。Azure DevOps提供一站式DevOps服务,涵盖源码管理、持续集成(CI)及持续部署(CD)。本文将指导你如何在Azure DevOps中搭建Angular项目的CI/CD流程,并通过具体示例代码展示整个过程。首先,我们将创建一个Angular项目并初始化Git仓库;然后,在Azure DevOps中设置CI流水线,定义YAML文件以自动化构建和部署流程。最终实现每次提交代码后自动构建并部署至Azure Web App,极大提升了开发效率和软件交付速度,使团队更专注于创新。
下一篇
DDNS