一直很想谈谈Continuous Integration(CI),持续集成。

就在不久前一次朋友聚会上,一个刚刚跳槽到一家创业公司的朋友跟我抱怨说他们没有CI,没有code review,要做点事太累了。而其实让这个刚刚开始上手的新手项目经理无语到吐的原因是,他们的一名主要开发人员责任心不够,很难沟通,bug率很高,还不愿加班改bug。

“现在招人很难的啊,所以也不能把他fire掉,哎。。。”

“有了CI又能怎样呢?”

“至少不用等到QA发现问题,下班前就能抓住他了!不过现在我们QA连自动化测试都没有。。。”

“你们的技术主管怎么不搞?”

“他太凶了。。。哈哈哈,其实现在都忙着接单子啦。”

“看来你们生意还兴隆呀?”
“貌似还不错的。”

在走出甜品店的时候他并没有什么心塞的样子,反而我的内心开始踌躇一个问题,“你需要CI吗?”

还是先形式主义一下,谈谈CI的作用吧。

当你花了一下午完成一个模块的代码,拿起还微热的拿铁呷了一口,伸了伸懒腰,惬意地环视一圈咖啡馆里的各色达人。然而,尽管你的代码已经通过本地Unit Test的重重测试,可你还是只能对坐在不远处那桌的妹子投入99%的贼心,因为总有1%的担心徘徊于这样一个问题:“这代码能直接上产线吗?” 你不是胆小,你只是不确定。没错,CI最通俗的作用便是尽早发现质量问题,使你无比自豪地堆完几块代码之后便能全心全意地冲着妹子荡漾春心,当然我知道你也就荡漾一下而已:)

然而,故事的走向或许是这样的。在一个烦躁的离下班还剩5分钟的下午,早已跟妹子约好晚上吃饭电影KTV的你在提交代码10次之后,CI还是红彤彤地一片。你看完最新的log有了一点点头绪,老板正兴致勃勃地期待着晚上的上线。选吧,少年!楼下已经等得没剩多少耐心的可能是你的终身大事和身后要求今天必须出包并完成beta测试已经虎视眈眈的你的金主。没错,CI的另一个作用,就是磨炼你的意志以战胜人性的弱点,在放弃和不放弃之间左右为难,万一你还是个处女座。。。

CI就像是小时候作业本背后的那几页参考答案,它能立刻给你结果,但一旦那结果始终与你的答案相左,便容易陷入抓狂。哈哈,其实也没有那么恐怖,此时便是DevOps的大神们出场的时候。

如同上一篇博文中曾提到的,我喜欢把CI描述为DevOps工作的起点。每个人对CI的看法和解释都会不同,对于吃过猪肉或只见过猪跑的人来说,CI一般可能长这样的(请别介意Jenkins和GitHub):

这张草图描述的是单一模块的CI,我们很多时候都会把多个模块的CI集成在一起形成适用于一个完整产品的CI系统,也有起名字叫作Pipeline。当你坐在市中心的Starbucks一边下午茶一边瞄妹子一边写代码的时候,大概还有几位兄弟在不开空调的办公室一边加班骂老板一边加班改bug呢。你们同时提交一段代码时,有效率的CI系统会把你们的提交按照流水线(Pipeline)的方式妥善安排执行,以避免你们互相踩踏影响各自的春心或苦心:)

这张草图中还有值得注意的三点。其一,部署测试环境(Deploy to Test ENV)和集成测试(Integration Test)都需要依赖某个版本的其他模块,一般会用最新版本或当前产线版本。而这也是Pipeline需要设计的一个部分。其二,有个隐藏关系便是,你的代码最好是基于代码库中最新的版本修改。CI系统应该实现在提交后的代码合并,并在一切都Happy之后自动合并入库。其三,最后那朵小云彩里的内容其实不比整张草图来的简单,那是DevOps大神们需要付出汗水的其他作品,以后再细谈。

尽管业界也有几个成形的CI产品,然而实际上想要找到一个适用于自身项目的CI系统并不容易。尚且先不说购买某CI系统服务需要多少钱,即使买来之后想要用得顺心,还得付出大量人力成本(DevOps)去设计用法和管理维护。因此,相比业界的收费工具,可按需定制搭建的开源产品往往更受到青睐,其中Jenkins应该是大家最熟悉的了,不过我并不打算介绍或评价某个工具的用法或好坏。我的观点是,无论用什么工具来搭建CI,对于DevOps的开发人员来说,都是在制作一件属于自己的产品。

适合的才是最好的,大家好才是真的好:)这便是对CI系统这件产品的要求。具体地,我会用几个方面的指标来衡量一个CI系统的质量高低。

1. 一键触发。高度自动化是对CI系统的基本要求,然而是否高度自动化的衡量更多的是在于对容错机制的实现。一旦提交的代码出现破坏环境的问题,系统是否能够自动回滚以恢复部署环境的健康并不影响代码库的版本控制。对人工干预的需求越少,越体现“一键”的功力。

2. 周期短。由于考虑到Pipeline的实现,协调各模块纷繁复杂的CI需求是件需要智慧的事情。效率是金钱,如果从代码提交到知道结果需要花去你一下午的时间,那对你或对那个妹子来说都是件残忍的事。统筹多方的考虑,我认为一次周期所需的能容忍的时间应该不能长于20分钟,这足以让你伸懒腰,泡咖啡,骂老板,上洗手间,聊人生关键节点了。

3. 配置快。一个可重用的CI系统框架是很多DevOps的追求。可事实却是,世界上基本找不到两个完全可重用的CI框架。原因很简单,对于不同产品,CI的内容也是不同的。其中,部署(Deploy)和集成测试(Integration Test)就是决定性因素。于是优秀的DevOps大神会在部署脚本和测试脚本上花去大部分脑力,而通过快速配置CI系统来实现一个新模块CI的需求。而这其中能重用的便是依此抽象出来的一套配置方式与适用于产品各模块的参数化的脚本。

4. 高可用。其实对于高可用的原则不用赘述。产品必须高可用,这是这一代互联网人的信条。CI是产品,也是保证产线质量的基础设施,自然也适用。

零零落落地写了这么多,我的咖啡也凉了。在这个没有太阳只有小雨的下午,对面坐的是依然美丽动人的老婆,咖啡馆里人也不多。再来杯最爱的美式,陪老婆看完电影就回家~

对了,因为CI而抓狂是正常的,不过也别太抓狂。Remember, CI drives you crazy only because you are a responsile person:)

转载于:https://www.cnblogs.com/jimmystartup/p/5352176.html

DevOps is dirty work - CI drives you crazy相关推荐

  1. 从零到一构建CI/CD的DevOps自动化流水线,需要考虑的开源项目

    构建CI/CD的DevOps自动化流水线的步骤 1.DevOps 和 CI/CD 流水线的简要介绍 2 构建CI/CD流水线需考虑的步骤 第一步:CI/CD 框架 第二步:源代码控制管理 第三步:自动 ...

  2. 猪八戒网CI/CD最佳实践之路

    序言 本文旨在介绍ZBJ DevOps团队倾力打造的DevOps平台中关于CI/CD流水线部分的实践.历经三次大版本迭代更新的流水线,完美切合ZBJ各种业务发展需求,在满足高频率交付的同时,提高了研发 ...

  3. Docker 容器从入门到Devops实践

    Docker 目录 Docker 介绍及优势 Docker 常用命令 Docker 环境的快速搭建 Docker 镜像和容器 Docker 网络基础原理 Docker 多机网络 Docker 持久化存 ...

  4. ci/cd heroku_在Heroku上部署Dash或Flask Web应用程序。 简易CI / CD。

    ci/cd heroku First, we'll transform the animated scatter map built in my previous article into a bas ...

  5. kubernetes+Azure DevOps实现.Net Core项目的自动化部署均衡负载

    1. 前言 前前后后学习kubernetes也有一个来月了,关于kubernetes的博客也写了有十多篇.但是技术如果无法落地到实际的应用场景终归是纸上谈兵,所以就有了这一出:通过结合kubernet ...

  6. AKS开讲啦! | DevOps with AKS

    上周小Phippy搬到了Kube船长船上的Pods里,感觉好极了,那今天我们继续看看Phippy的兴趣爱好哦. 探索Kube船上的世界 上篇(点击回顾)小Phippy 搬到了船上的Pods里,感受到了 ...

  7. 一文读懂云上DevOps能力体系

    简介: 阿里云ECS自动化运维套件架构师,深度拆解云上运维能力体系建设:自动化运维等级金字塔.自动化运维的进阶模式.DevOps的基础核心.云上标准化部署三大能力-- 序言 云计算行业已经有十多年的发 ...

  8. 极狐(GitLab)发布首款“GitNative”DevOps云一体化解决方案

    2022年1月5日,极狐(GitLab)正式宣布推出业界首款"GitNative"--"Git原生" DevOps 云一体化解决方案(以下简称"Git ...

  9. DevOps平台中的自动化部署框架设计

    本文目录: 一.背景 二.我们的需求是什么? 三.概念澄清 四.概念模型 五.总体设计 六.关键点设计 七.总结 一.背景 说到自动化部署,大家肯定都会想到一些配置管理工具,像ansible,chef ...

最新文章

  1. CentOS 安装Nginx
  2. spring roo_使用Spring Roo进行概念验证
  3. 整天做办公室的我们要注意饮食啊
  4. 2给我背书_考研村 | 在哪一瞬间,你觉得寄宿考研学校的背书教室真好?
  5. OSPF Sham-Link
  6. zqoj 1819: 加加加!(油) 【水题】【郑大校赛】
  7. python控制小爱同学_小爱同学控制电脑开机 - IT客栈
  8. 常见在线射频电学计算公式
  9. C语言运行机制(过程)简述
  10. 360极速浏览器如何设置ie8兼容模式
  11. noi acm topcoder
  12. c语言自定义创建文件,c语言自定义文件名?
  13. 使用vite插件编写tsx文件
  14. CSDN cdsn显示发布频繁 请稍后重试 和保存草稿不成功 的解决办法
  15. 文本相关_SAP刘梦_新浪博客
  16. 百万富翁——真正的四则计算器
  17. java bs项目_BS(Java平台)
  18. 第一章 InterSystems SQL简介
  19. 1588时钟同步算法仿真matlab,基于卡尔曼滤波与PID控制的IEEE1588从时钟同步研究
  20. leetcode2021年度刷题分类型总结(八)贪心 (python)

热门文章

  1. 均方距离计算公式_Excel2013中通过公式计算方差与均方差来反映数据的偏移程度...
  2. Python Excel操作模块XlsxWriter之写入数组公式worksheet.write_array_formula()
  3. Auto-Exposure Fusion for Single-Image Shadow Removal——论文阅读
  4. scrollToBottom
  5. 质量管理中的“二八法则”
  6. YesPlayMusic 0.4.0中文版:一款mac用户必备的网易云音乐客户端
  7. QQmail安装例子
  8. 2022QS世界大学排名:全球全日制MBA、商科硕士榜单公布
  9. 出入库管理系统1(配件报表-后录编号)
  10. 【离线】esrally实践总结