写点什么

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

  • 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:379050
用户头像

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

关注

评论 1 条评论

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

存储卷指标消失之谜 | K8S Internals 系列第二期

BoCloud博云

Kubernetes kubelet

vue 自从使用了组件,工作量减去了一半

CRMEB

TiDB 6.0 新特性解读丨 Collation 规则

PingCAP

Carina 全新版本 V0.10发布 :支持裸盘作为存储卷

BoCloud博云

开源 本地存储

投稿开奖丨云服务器ECS征文活动(2&3月)奖励公布

阿里云弹性计算

云服务器 征文投稿开奖 玩转ECS

博云:Kubernetes 近年影响最大版本发布,这几点值得关注

BoCloud博云

Kubetnetes

09-条件查询器Wrapper

爱好编程进阶

Java 程序员 后端开发

《2022微隔离技术与安全用例研究报告》重磅发布 | 附PDF全文下载

青藤云安全

SAP 订单模型的编排方式概述

汪子熙

订单管理 订单 5月月更 b2b 编排系统

姐姐驾到 | 零基础小白如何学前端!

锋享前端

2021年证券类APP更新迭代检测专题分析(上)发布

易观分析

金融 券商App

MySQL__数据处理之查询

编程江湖

JAVA异常情况如何处理?

源字节1号

后端开发

gRPC三种客户端类型实践【Java版】

FunTester

得物技术消息中间件应用的常见问题与方案

得物技术

kafka 分布式 MQ 中间件 消息队列

让客户实现 AI 算力“自由”,博云与趋动科技完成算力调度容器化验证

BoCloud博云

AI

告诉你使用预约小程序的9个理由

天天预约

小程序 SaaS 企业服务 预约工具

数据湖揭秘—Delta Lake

阿里云大数据AI技术

sql spark 分布式计算 关系型数据库 存储

web技术支持| Web 客户端实现录音、录像

anyRTC开发者

前端 Web 音视频 WebRTC 视频通话

案例分享|智慧广电的“宽带加速”之路,博睿数据来“私人定制”

博睿数据

数字化转型 博睿数据 智慧广电

如何真正将企业知识管理做出价值?

小炮

企业知识管理

直播预告|争夺存量用户关键战,助力企业构建完美标签体系

袋鼠云数栈

大数据 数据中台

盲盒系统开发盲盒源码搭建需要多长时间

WDL22119

极狐GitLab入驻阿里云计算巢,共同提升云上开发体验

阿里云弹性计算

DevOps 计算巢

为了让女朋友运动起来,小伙儿不仅买单车还设计了智能防盗单车锁

华为云开发者联盟

stm32 华为云IoT 智能防盗单车锁 蓝牙

互联网用户画像,精准营销,数仓有妙招

华为云开发者联盟

位图 GaussDB(DWS) 用户画像 精准营销 Roaringbitmap

万亿储能的极限拉力赛

钛禾产业观察

线程通信

急需上岸的小谢

5月月更

【国产】自动化运维ETL统一调度平台TASKCTL流程触发方式

敏捷调度TASKCTL

DevOps 分布式 数据仓库 ETL 自动化运维

赵海鹏:如何进行OpenHarmony音频特性架构设计和开发工作

OpenHarmony开发者

OpenHarmony 开发者故事 开发者说

记一次存储系统IOPS翻倍的性能优化

Vincent

性能优化 存储系统

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