速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

如何以可组合块的方式重构 CI/CD 管道

  • 2020-04-18
  • 本文字数:1065 字

    阅读完需:约 3 分钟

如何以可组合块的方式重构CI/CD管道

DeliveryConf大会上,VMware 主管工程师Bryan Liles讨论了构建持续集成交付(CI/CD)管道的一系列原则。Liles 建议,应将 CI/CD 视为模式而非 Jenkins 或 Spinnaker 这样的具体实现;需要构建一种平台,它由独立于技术堆栈的可组合部分和可替换组件构成。


演讲一开始,Liles 介绍了会有多少企业按照传统的方式构建 CI/CD 管道,并阐明建立此类管道的目的是实现应用从开发环境到生产环境的迁移。交付过程在本质上就是从源代码管理方获取应用的代码,进而在管道中编译应用,形成工件并打包(bundle)存储在仓库中。最后,管道将打包文件交付给各个环境,例如开发、测试和生产。Liles 指出,如果交付管道看上去非常复杂,那么这意味着技术栈不应该再继续复杂下去了。


在 Liles 看来,工程人员应该将部署管道看成是一些可组合的块和模式,而非仅注重实际使用的 Jenkins 或 Spinnaker 等具体实现。例如,管道中的一部分可以是完成应用构建、运行测试和创建工件的集成块,该部分可以使用 Jenkins 实现,但也支持使用 Circle CI 等其他工具。管道中的另一个块可以部署应用、征求批准和执行数据迁移的交付过程。集成和交付块都具有一些相同的基本组件,例如 Webhook 触发器、工作流、通知和批准等。集成块和交付块是部署管道这一更大的可组合部分中的一部分。



Liles 提出:“必须更多地考虑系统的可组合性。”部署管道应该是一种将应用交付至指定目的地的应用发布“平台即服务”(PaaS)。Liles 建议将部署管道重新定义为可组合的 PaaS,工程人员可轻易更改其中的各个组件。该模式的典型例子就是 Kubernetes。作为构建平台的平台,部署管道可基于 Kubernetes 实现与上述集成块和交付块一样的基本组件,同时支持使用其它各种不同的工具。例如,集成部分可以使用TektonArgo实现触发器、工作流、通知和批准块。


Liles 进而指出,Jenkins、Spinnaker 或 ConcourseCI 之类的工具可用于定义如何构建 CI/CD 管道以及如何使用它们,但应在使用中汲取前车之鉴,避免入坑。由此,他建议应以破旧立新的思维去利用工具:


我们确实需要换种思维去使用各种工具。技术现状驱动我们到达了当前的位置,但这并非我们所需要的高度。我们应该拓展思维,破旧立新。


Liles 最后总结道,工具本身是复杂的,但从生态系统角度看,我们应致力于去构建更小且可组合的工具集。他建议工程人员琢磨一下如何共同改进生态系统,而不是沉溺于如何在现有工具上锦上添花。他认为自己提出的构建方式仅是抛砖引玉,“关注点应是更多地考虑系统中的可组合性。”


原文链接:


Reimagining CI/CD Pipelines as Composable Blocks with Bryan Liles


2020-04-18 09:001812

评论

发布
暂无评论
发现更多内容

Qt|控件的事件过滤使用与总结

中国好公民st

c++ qt 10月月更

开发者有话说|以码为梦,心向远方,路在脚下

乌龟哥哥

个人成长 10月月更

架构师的十八般武艺:领域建模

agnostic

领域建模

第九期 - 模块二

wuli洋

陈宗绵|关于研发效能的理想与现实

laofo

DevOps cicd 研发效能 持续集成 持续交付

【C语言难点突破】指针和数组名的爱恨情仇

Geek_65222d

10月月更

《Rust for Rustaceans》读书笔记2

袁世超

rust

【愚公系列】2022年10月 Go教学课程 019-循环结构之for

愚公搬代码

10月月更

利用Vue自定义指令让你的开发变得更优雅

茶无味的一天

Vue 前端 vue指令

JavaScript——JS事件

胖虎不秃头

前端 js 10月月更

2022 Kubernetes 批处理和HPC发展一览

琦彦

HPC 批处理 KubeCON 10月月更

构建Java镜像的10个最佳实践

琦彦

Java应用 Docker 镜像 10月月更

什么是光网络,几张图就可以很好的解释!

wljslmz

光纤 10月月更 光网络 通信网络

架构实战营模块 2 作业

陌生流云

架构实战营

docker-maven-plugin:自动构建Docker镜像,并推送到Docker Registry或阿里云

琦彦

Docker maven 10月月更 docker-maven-plugin

Python应用之寻求两个数对之间的最大乘积

梦笔生花

Python语法 10月月更 split函数

二分查找

掘金安东尼

算法 10月月更

JavaScript——关于JavaScript、在HTML中嵌入JS代码的三种方式、变量

胖虎不秃头

前端 js 10月月更

vue快速入门---高速版

楠羽

笔记 VUE 3.0 源码 10月月更

ESP32-C3 学习测试 蓝牙 篇(七、GATT 数据通信 — 发送自定义数据)

矜辰所致

蓝牙 ESP32-C3 10月月更

JVM——垃圾回收算法

琦彦

Java JVM 垃圾回收 10月月更

作为Android Coder,你了解注解吗?

子不语Any

后端 java; 10月月更

Docker层和虚悬镜像(dangling image)介绍

琦彦

Docker 10月月更

Python应用之丑数的判断

梦笔生花

Python 10月月更 丑数

一文了解 CPython 中的垃圾收集器

宇宙之一粟

Python 垃圾回收算法 垃圾收集器 10月月更

JavaScript——数据类型

胖虎不秃头

前端 js 10月月更

基于BuildKit优化Dockerfile的构建

琦彦

Dockerfile 10月月更

Docker可视化工具Portainer的安装和使用

琦彦

Docker Portainer 10月月更 可视化管理工具

如何以非root用户运行Docker容器

琦彦

Docker 10月月更 root用户

Python应用之拉力赛求最短时间

梦笔生花

10月月更 Python语法应用 函数构建

2022-10-05:在一个 n x n 的整数矩阵 grid 中, 每一个方格的值 grid[i][j] 表示位置 (i, j) 的平台高度。 当开始下雨时,在时间为 t 时,水池中的水位为 t 。

福大大架构师每日一题

算法 rust 福大大

如何以可组合块的方式重构CI/CD管道_软件工程_Christian Melendez_InfoQ精选文章