写点什么

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

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

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

关注

评论 1 条评论

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

一篇文章教你在业务开发中高效玩转TDD(测试驱动开发)

Java你猿哥

Java ssm TDD

如何通过Logstash将MySQL数据同步到ElasticSearch

北桥苏

php MySQL elasticsearch Logstash

Logstash如何批量同步MySQL多表到ElasticSearch

北桥苏

elasticsearch Logstash ELK Stack

干货力荐!京东首席架构师:亿级流量架构的核心技术文档

做梦都在改BUG

Java 架构 亿级流量

由Elasticsearch7.8评分脚本引起的一个索引迁移解决方法

北桥苏

elasticsearch Logstash ELK Stack

最简单的canal 1.1.6服务搭建方法

北桥苏

elasticsearch canal

背废完虐面试官!字节架构师8年心血终成《图解设计模式》手册

做梦都在改BUG

Java 设计模式

系列课程:从零开始接触人工智能大模型(介绍)

茶桁

Github标星90K!不愧是阿里大牛珍藏的LeetCode题解全彩小册

Java你猿哥

面试 算法 LeetCode ssm 算法题

程序员晋升指南!13年顶级架构设计经验的锦囊妙计与实践分享

Java你猿哥

Java 架构 ssm 架构设计 架构师

23年最新Java岗常见面试题及答案(1000道),90% 的公司都会问到

Java你猿哥

Java MySQL zookeeper JVM java面试

毫不夸张的说,这份SpringBoot学习指南能解决你遇到的98%的问题

做梦都在改BUG

Java spring Spring Boot 框架

简单聊聊Java中线程安全有哪些实现思路?

做梦都在改BUG

Java 多线程

Kubernetes CNI之Flannel网络模型分析

王玉川

Kubernetes 云原生 flannel VXLAN cni

Github火到CSDN, 字节高级架构师亲码出 elasticsearch 实战手册

做梦都在改BUG

Java 搜索引擎 elasticsearch ES

必知必会的JavaScript前端面试题篇(二),不看后悔!

Immerse

独一份,15年经验汇聚而成的《SpringBoot“踩坑”手册》首次开源

做梦都在改BUG

Java spring Spring Boot 框架

Windows下hadoop环境搭建之NameNode启动报错

北桥苏

大数据 hadoop

windows下Hive搭建踩坑汇总

北桥苏

hadoop hive hql

【RabbitMQ】| 带你 (超详细) 从0到1使用SpringBoot操作RabbitMQ

Java你猿哥

Java spring Spring Boot ssm RabbitMQ

创意世界在 Photoshop 上运行~

真大的脸盆

Mac ps Mac 软件 Photoshop 2022下载

逆袭!阿里专家手码23版Java面试三件套,Github星标直线狂飙

Java你猿哥

Java 微服务 面经 算法题 java核心知识点

深入解析Java适配器模式:将接口转换为你所需要的形式

做梦都在改BUG

Java 适配器

BOSS直聘首发半小时被下架!300MB实战SpringBoot笔记爆赞过百万

做梦都在改BUG

Java spring Spring Boot 框架

深入探秘OpenTelemetry Agent奇特的muzzle机制

骑牛上青山

Java Java Agent OpenTelemetry

2023最新后端中大厂面经&在面试过程中如何反问?

Java你猿哥

Java ssm java面试 面试官 Java面经

单调栈模板总结及应用

timerring

算法

Logstash同步MySQL关联表到Elasticsearch的嵌套文档中

北桥苏

elasticsearch Logstash ELK Stack

使用Spring Boot接入ChatGPT

Java你猿哥

Java spring Spring Boot ssm ChatGPT

PoseiSwap:合规、隐私与支持更广泛的资产

鳄鱼视界

Logstash同步MySQL一对多关联表到Elasticsearch父子文档

北桥苏

elasticsearch Logstash ELK Stack

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