写点什么

另一种声音:持续集成已死

  • 2014-10-17
  • 本文字数:935 字

    阅读完需:约 3 分钟

持续集成(Continuous Integration)一直被认为是敏捷开发的重要实践之一,但也有专业人士开始挑战这种观点。Yegor Bugayenko 是 teamed.io 的联合创始人和 CTO,他在最近的一篇博客中毫不客气地指出:“持续集成已死”。

持续集成的目的简单而明确。当有人向代码库的主分支提交代码的时候,后台的持续集成服务器会尝试去构建整个产品,包括编译、单元测试、集成测试、质量分析等等。结果只有两种:成功或失败。如果结果失败了,那就说明有人提交了对产品有害的代码。

单从技术上讲确实如此,但 Bugayenko 认为,从整个组织的角度来讲,这却是不合时宜的。他认为最大的问题在于:

如果构建失败,整个开发团队必须停下手里的工作,立刻修复他们的错误。

谁愿意停下来呢?产品经理盯着产品早日上市,而项目经理,需要为项目的最后期限负责,被压力赶着走的程序员更不会了。Bugayenko 描述了他所见到的真实情况:

我们开始忽略持续集成的状态,不管是成功还是失败。我们还是埋头干我们手里的事情。也许明天,也许周一,等我们有空的时候再修复构建的错误。

Bugayenko 也尝试了用严格的纪律来保证团队及时修复错误,但这样也有问题:

如果这样做,你的最终结局就是得到一种“由恐惧驱动的开发模式”。程序员会害怕提交代码到仓库中,因为他们知道如果导致构建错误,他们至少要道歉。

严格的纪律只会使情况更糟糕,程序员更愿意把代码保留在本地以免犯错,从而拖慢了开发流程。等到必须要提交的时候,一次提交很多代码,如果出错,又很难回溯。

对于这种困境,Bugayenko 给出了他认为可行的方案:“对主分支实行只读策略”。这种方式禁止开发人员直接向主分支提交任何代码,取而代之的是一个脚本,它会在合并代码前做一系列测试,确保无错才允许提交。这样做解决了前面的两个问题:主分支永远是“干净”的;程序员也不用再担心犯错,因为他们最多就是被脚本拒绝提交而已。

Bugayenko 还给出了多篇相关文章来支持自己的观点。在博客的评论区,也有读者指出,Bugayenko 所说的解决方案在现实中一直被一些代码审核系统所采用。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-10-17 11:379416
用户头像

发布了 77 篇内容, 共 40.0 次阅读, 收获喜欢 26 次。

关注

评论 1 条评论

发布
用户头像
什么乱七八糟的文章
2020-09-01 16:24
回复
没有更多了
发现更多内容

河南等保测评公司都有哪几家?都在哪里?

行云管家

网络安全 信息安全 数据安全 等级保护

混合云的概念以及优势劣势简单介绍-行云管家

行云管家

云计算 混合云 多云 云管平台

月薪3万的大厂测试工程师裸辞3个月,送外卖谋生背后的真实感悟

六十七点五

程序员 程序人生 软件测试 软件自动化测试 测试工程师

Vue项目优化打包——前端加分项

CRMEB

就是简单,全球100多万读者,一起跑通前端HTML5与CSS3知识!

图灵教育

大前端 HTML5, CSS3

我是一个程序员,总想引导亲朋好友走上编程的伟大航路......

图灵教育

程序员 App Inventor

不要再重复造轮子了,Hutool这款开源工具类库贼好使

沉默王二

Java

uni-app技术分享| 10分钟实现一个简易uniapp视频通话

anyRTC开发者

uni-app 音视频 WebRTC 实时通信 视频通话

CSS布局之display:flex(二)

Augus

CSS 11月日更

我所理解的社群—社群本质

sec01张云龙

社群 11月日更 社群运营

千万级学生管理系统的考试试卷存储方案

Steven

架构实战营

Nebula Graph 源码解读系列 | Vol.04 基于 RBO 的 Optimizer 实现

NebulaGraph

图数据库 源码解读

LevelDB Java&Go实践

FunTester

Java 自学 Go 语言 leveldb FunTester

拥抱智能,AI 视频编码技术的新探索

阿里云CloudImagine

阿里云 视频编码 机器视觉 视频编解码 视频云

前端的状态管理与时间旅行:San实践篇

百度开发者中心

大前端 san san-store 技术实践

项目管理常见问题系列(1)—资源不足

一叶而不知秋

项目管理

手把手教你学Dapr - 1. .Net开发者的大时代

MASA技术团队

C# .net 微软 后端 dapr

令人不悦的–requests.exceptions.ProxyError

老表

Python Error 11月日更 ProxyError

Python代码阅读(第58篇):压缩列表

Felix

Python 编程 列表 阅读代码 Python初学者

一招教你通过焱融 SaaS 数据服务平台+ELK 让日志帮你做决策

焱融科技

云计算 分布式 SaaS 公有云 文件存储

极光笔记丨关于数据大屏一比一还原设计稿这件事

极光GPTBots-极光推送

大前端 数据可视化

企业如何选择合适的低代码平台?这6点不得不考虑!

J2PaaS低代码平台

低代码 低代码开发 低代码平台 企业数字化

彻底搞懂Spring状态机原理,实现订单与物流解耦

Tom弹架构

短视频个性化Push工程精进之路

百度Geek说

后端 软件架构

手把手教你学Dapr - 2. 必须知道的概念

MASA技术团队

C# .net 微软 后端 dapr

模块三作业——外包学生管理系统架构设计

覃飞

【高并发】通过ThreadPoolExecutor类的源码深度解析线程池执行任务的核心流程

冰河

Java 并发编程 多线程 高并发 异步编程

首次!统一调度系统规模化落地,全面支撑阿里巴巴双 11 全业务

阿里巴巴中间件

阿里云 云原生 中间件 双十一 统一调度

第一本 Compose 图书上市,联想大咖教你学会 Android 全新 UI 编程

图灵教育

Compose AndroidUI

速来!开源中国首届飞算SoFlu组件开发悬赏赛来袭

飞算JavaAI开发助手

Java

另一种声音:持续集成已死_DevOps & 平台工程_曹知渊_InfoQ精选文章