写点什么

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

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

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

关注

评论 1 条评论

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

iOS 布道者龙神:永远挑战难度值增加 30% 的事情

融云 RongCloud

Linux下进程崩溃定位

正向成长

OOM崩溃

现成合约交易系统软件开发案例

合约跟单系统软件开发资料(搭建)

/var/lib/docker目录磁盘满了,更换默认目录

阿呆

语聊房 SDK,下一代场景化解决方案新范式

融云 RongCloud

Flink Could not find any factory for identifier 'XXX' 排查过程

大可大大大

北京天源迪科携迪易采参加“第五届中央企业电商化采购发展高峰论坛”

科技热闻

SQL实现连续登陆人数天数统计

大象灵感

sql 大数据 hive 数据仓库 数据分析

区块链交易所系统软件开发资料(源码)

架构实战营-模块一作业

御道而行

架构实战营

博鳌科创论坛第二届大会区块链分论坛预告

Geek_6e23d8

区块链 博鳌亚洲论坛

自定义View:属性动画和硬件加速

Changing Lin

10月月更

腾讯云 CIF 工程效能峰会顺利开幕,CODING 发布系列新产品

CODING DevOps

Orbit Nocalhost Compass 研发度量 项目协同

CTF专题一2021网络WEB题目解析

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

区块链数字货币交易所系统开发资料(案例)

现成合约交易系统开发模板

Kubernetes CRI 分析 - kubelet 创建 Pod 分析

青云技术社区

云计算 云原生 kubenetes

Kubernetes Service Proxy 无秘密

绅鱼片

Kubernetes 网络 iptables k8s网络 kube-proxy

区块链交易所系统开发方案(案例)

Transformer模型在语音识别领域最新进展,百度语音发布重大技术突破SMLTA2

科技热闻

合约交易系统软件开发介绍(源码搭建)

浪潮云说丨浪潮云AI能力广场 集成AI服务,打造AI开放平台

云计算

关于FL Studio20通道机架的一些使用技巧

懒得勤快

现成交易所系统软件开发案例

官方线索|脉脉1024程序员嘉年华

穿过生命散发芬芳

1024我在现场

从语聊房 SDK 的诞生,看 PaaS 服务的演进过程

融云 RongCloud

Bazel与Gradle构建工具差异对比

轻口味

android 构建工具 10月月更

区块链数字货币交易所系统软件开发详情(源码)

WICC 话题剧透|Beeto 陈昊:中东爆款社交平台是怎样炼成的

融云 RongCloud

Java自定义异步功能实践

FunTester

Java 线程池 接口测试 异步 FunTester

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