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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 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
相关文章
|
10天前
|
测试技术 开发者 Python
自动化测试之美:从零构建你的软件质量防线
【10月更文挑战第34天】在数字化时代的浪潮中,软件成为我们生活和工作不可或缺的一部分。然而,随着软件复杂性的增加,如何保证其质量和稳定性成为开发者面临的一大挑战。自动化测试,作为现代软件开发过程中的关键实践,不仅提高了测试效率,还确保了软件产品的质量。本文将深入浅出地介绍自动化测试的概念、重要性以及实施步骤,带领读者从零基础开始,一步步构建起属于自己的软件质量防线。通过具体实例,我们将探索如何有效地设计和执行自动化测试脚本,最终实现软件开发流程的优化和产品质量的提升。无论你是软件开发新手,还是希望提高项目质量的资深开发者,这篇文章都将为你提供宝贵的指导和启示。
|
7天前
|
监控 安全 测试技术
在实施自动化和持续集成的过程中,如何确保代码的安全性和合规性?
在实施自动化和持续集成的过程中,如何确保代码的安全性和合规性?
|
16天前
|
jenkins Java 持续交付
软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分
随着软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分。本文以电商公司为例,介绍如何使用 Jenkins 自动发布 Java 代码,包括安装配置、构建脚本编写及自动化部署等步骤,帮助团队实现高效稳定的软件交付。
27 3
|
26天前
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
1月前
|
缓存 监控 数据可视化
利用GitLab CI/CD自动化您的软件开发流程
【10月更文挑战第10天】GitLab CI/CD 是 GitLab 内置的持续集成和持续部署工具,通过编写 .gitlab-ci.yml 文件,可以自动化构建、测试和部署应用程序的过程。本文介绍 GitLab CI/CD 的核心优势、实施步骤及在现代开发中的应用,帮助您提高开发效率和软件质量。
|
22天前
|
运维 安全 Devops
DevOps实践:持续集成与持续部署(CI/CD)的自动化之路
【10月更文挑战第22天】在软件交付的快速迭代中,DevOps文化和实践成为企业加速产品上市、保证质量和提升客户满意度的关键。本文将通过一个实际案例,深入探讨如何利用持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)实现软件开发流程的高效自动化,包括工具选择、流程设计以及问题解决策略。我们将一起探索代码从编写到部署的全自动化旅程,揭示其对企业运维效率和产品质量所带来的深远影响。
|
26天前
|
运维 监控 jenkins
运维自动化实践:利用Jenkins实现高效CI/CD流程
【10月更文挑战第18天】运维自动化实践:利用Jenkins实现高效CI/CD流程
|
27天前
|
运维 持续交付 开发工具
基础设施即代码(IaC):自动化基础设施管理的未来
基础设施即代码(IaC):自动化基础设施管理的未来
36 0
|
1月前
|
JavaScript 前端开发 搜索推荐
Gulp:构建自动化与任务管理的强大工具
【10月更文挑战第13天】Gulp:构建自动化与任务管理的强大工具
67 0
|
1月前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
65 4