2019-10-11

2019-10-11  本文已影响0人  star1988007

CI/CD 理想模型

云原生下交付理念

随着k8s成为容器编排系统的事实标准,软件构建/交付发生了很大的变化。也许你还没有体验到历史车轮前进的痕迹,但它确悄无声息的一直前行。对于开发、运维人员 这也是一次小小的技术革命,既然是革命总有人(保守派)要为此丢掉原有的奶酪,另外一批人(激进的人士)或多或少出现一些弯道超车的机会,对于行业从业者来说既是机遇也是挑战。传统的运维、dba岗位需求将会越收越紧,开发不再只局限于产品逻辑开发,会不同程度的参与ci部分的建设。即ci会慢慢向研发端下沉,由运维提供构建规范。解放ci构建项目工程的自由度。
k8s以及(service mesh)服务网格的出现打破了互联网构建、交付技术循序渐进的脚步,从而实现不同以往的跨越(也可以称之为技术进步)
本文ci/cd理念便是在这种行业背景下产生的(个人感悟)。

cd即持续交付,是在ci的生产物上进行的经过ci流程的一系列操作后产生了最终的交付物,但是我们怎么交付给最终用户使用呢,
交付过程中如何做到对用户无感知
交付过程如何做到发布失败对用户没有影响(或者说影响接近于0)
交付过程中如果新版本有错误如何做到安全的版本回滚呢
cd即是在这一复杂情况下诞生的。
在以用户体验为中心的互联网产品频繁迭代、开发、时期我们必须接受失败是一种常态、失败是安全的、低影响的。
在此理念下我们就知道了CD要做什么,而不是关注于cd工具本身。
业界关于cd(持续交付)有以下实践理念

理念总要有工具或者技术来实现支撑,cd的工具有商业、开源基本这两类,这里只探讨非商业项目
大多数ci工具都提供原生、或者以插件形式扩展集成了cd功能。jenkins、drone、gitlab
但是ci跟cd耦合在一起也会产生不便,如果某一版本发布一段时间后,产品或者测试发现了bug或者莫个功能的缺陷,此时有两种解决方案

1 研发修改代码上线新的版本解决
2 暂时将版本回滚上一稳健版本
当采用回滚方式时由于ci与cd高度耦合无法直接回滚,(除非手动登陆服务器操作)
其回滚会再次经历ci过程,即使跳过ci也会留下一个空的构建版本号。
大中企业一般是采用ci工具,然后使用自研的cd工具、或者平台;也有采用开源cd项目的。单纯使用ci工具处理cd流程功能稍显不足

k8s环境下的cd工具

tekton 是一个强大而灵活的k8s原生开源框架,用来进行持续集成和交付系统,对底层细节实现进行抽象,可以实现跨多云平台、多集群系统交付。可以跟jenkins配合使用

CNCF维护项目,未毕业。 基于gitops理念。在git中声明性的描述系统的期望状态,使用YAML来进行强制一致性管理,所有更改都是通过git进行,使用差异化工具来检测状态跟期望状态的差异;提供原子性和事务性,操作要么全部成功,要么全部失败。

只支持容器环境,传统服务器软件交付不支持

利用k8s插件或者ansible进行cd操作,拓展性差。

360公司开源产品,功能齐全,可视化好,不错的权限控制、审计功能。缺点是灵活性不够,配置项太多操作繁琐,没有提供pv文件的管理。所以操作都要通过前端web页面进行操作,不利于后期自动化处理。

上一篇 下一篇

猜你喜欢

热点阅读