Intercom的持续部署实践:一天部署100次,1次10分钟

本文讲的是Intercom的持续部署实践:一天部署100次,1次10分钟,【编者的话】这篇博文分享了 Intercom 公司在持续部署的经验和体会。Intercom 公司从创业起步时就开始认定持续部署的重要性,从2002年每天10次部署,到今年每天接近100次的部署,积累了丰富的经验,对持续部署有着较为深刻的认识,虽然本文没有详尽的技术细节,所谓的干货,不过个中经验分析,比如 "帮助新来的工程师"这个想法蛮有新意,另外正如文中所说 -- "部署时间的增加,会使你的产品变得越来越无趣 ...... 因为效率在降低,学到的东西在减少,工程师会变得很沮丧 ...... ",编者作为同行,也深有感触,特此推荐。

对于持续部署,湾区日报这样评论:

一个团队工程技术水平高低,直接反映在部署代码上。我碰到其他公司的人,都喜欢问你们怎么部署代码的,非常大开眼界。你很难相信,很多(有一定规模的)公司仍然是人肉SSH到十几、二十台机器上git pull、手动重启服务器,部署一次代码几个小时 -- 这么原始,活该加班:)

快速自动部署新代码,对 Intercom 来说,是整个产品构建的重中之重。Intercom的运维工程师如是说。

持续部署这件事在公司的初期就已经开始了。最近 Intercom 的On Product会议,我讲了有关持续部署带来的那些未曾预期的回报,下面这个版本在此基础上稍稍有所更新。

Intercom 的一个核心价值在于我们的目标很大,但从小处开始着手。也就是说,对那些大的不确定的但有影响力的项目,我们会将它们拆成一系列小的、安全的步骤。开发新的产品功能时,我们先做一个最简单的版本,给它一个标签来部署,当然这些标签只有 Intercom 的成员能看到。根据反馈,会打补丁并改进,之后推给Beta客户使用。再经过一轮的迭代、修改之后,我们就会将这个功能发布给每个人。

这一条反馈路径价值巨大,用在每一个产品开发中。从中我们学到了客户如何使用这些功能,代码如何在线上环境发挥作用,甚至讨论这些想法够不够好。对于大多数新功能来说,在真正把它推给客户之前,几十次的迭代开发我都进行了部署。而且,多个功能在同一时间被开发,也就是说,我们一天都要部署很多次。

通过我们内部的部署图表,可以看出,过去三年我们每一天部署的次数。2012年中期的时候,一天大约要部署10次,而今天则要超过80次。我估计2015年年末的时候,一定会超过100次。

其中,部署次数的大规模提高,主要源自团队人数的显著增长。当我们有很多开发者,需要每天80次的改变,来共同完成一个产品时,这要求我们的部署流程更快、更流畅且更可靠。

回想曾经我们只有六个人,一起构建 Intercom 的自动化部署系统。

下面是一个关于这个系统的介绍:

在GitHub上做完代码检查之后,工程师就会将他们做的功能放进主代码树。GitHub会发通知给Codeship,由它运行我们的测试用例,保证之前存在的功能不会因为这些新的改动而出现问题。GitHub也会发通知给我们的工具"Muster",用来准备最新版本的代码做发布。

一旦测试用例都跑通过,Codeship会给Muster发消息,代码会被推到我们线上的环境中,大约200台的EC2机器。

整个部署过程,全都算上,也没超过10分钟,很快。这样,工程师不用等很久就可以见到自己的功能上线了;如果是在做Beta的功能,在上线前,我们有一堆的bug要修,假设代码写得够快,就可以保证在一天之内把它们都部署上去。

额外的回报

过去的三年,由于天天做这些事,我们注意到持续部署对我们的工作还有一些其他有意思的好处。

帮助新来的工程师

一个新来的工程师,第一周,我们都会为他设定两个初始目标:他们第一天必须要发布一些代码到线上环境,第一周必须要发布一个功能。这会让他们感觉到自己很棒很高效。周五的时候我们会有专门一个环节,给整个公司来展示这一周我们做的事;站在那,给你的同事展示,你在公司的第一周,就给客户带来的线上新功能,很有成就感吧。

当然这些目标对于一个新来的工程师而言,还是蛮有挑战的。在你完成这个目标之前你需要做很多的准备工作:配好笔记本,和团队讨论,想出你将做的事情,然后写代码,可能 Intercom 中使用的编程语言并不是你熟悉的那种,所以这里有很多的困难,也许你在第一周完不成这个新功能。

不过有一点,不会拖慢你在 Intercom 工作效率,那就是搞清楚如何部署你的改动。因为有全自动化的部署系统,这一困难就不复存在,新工程师也能随时部署他们的改动。如果他们对此有兴趣的话,也可以后面再来研究自动化部署是如何工作的,甚至看懂代码改进部署系统。对于他们的第一周,不用去学习部署的规则和流程,确实帮助很大。

摒除坏习惯

> 线上环境打补丁:pic.twitter.com/saD82hLacz
-- Practical Developer (@ThePracticalDev) August 11, 2015

另一个有意思的好处是持续部署可以帮助我们摒除坏习惯。当你在线上环境中发现一个很严重的bug,会尽可能的想办法快速修掉这个问题。

如果部署的系统很慢,从代码入主树到最后部署上线需要二十分钟的话,你会想用任何可能的方法来尝试修复,包括一些很不正规的方式。这听起来有点莽撞,但它可能是正确的选择。因为你不想坐在那里,等待20分钟,结果看着你的程序奔溃。这里的诀窍就是得让你的部署系统快速,足够可靠,更容易使用,这样就可以避免在线上环境那些不正规的修复方式。

优化我们的部署效率

这件事的工作量很大。我们知道目前部署过程需要8-9分钟,这并不差,但可以更好。我们团队当前很多的工作就是优化部署系统,让它变得更快。理想中,我们只要3-4分钟,这样就可以保证有每一天100次以上的部署。

如果你的公司很成功,一段时间之后呢,很多事情也会开始变化。你会雇佣更多的人,你的团队会增加,你们会写更多的代码,你的代码库会增长,也会引入新的流程(比如六个人能干的事不要100个人去干),期望中你们会写很多的自动化测试,加新功能时可保证不会干扰到已有的。但所有这些都会增加部署时间,也就是说会减慢反馈路径所经历的时间。

这也会使你的产品变得越来越没趣。因为每一天你的效率在降低,学到的东西也在减少,工程师会变得很沮丧,这会让你的产品变得很糟糕。很有可能会犯错误,构建错误的功能,投资在一些其实并不需要投资的地方。

所以呢,在 Intercom 的早期,我们就认定减少部署时间,对于反馈路径的缩短极为重要,即我们要能够在最短的时间内为客户构建准确的功能。

原文链接:Why Continuous Development Just Keeps On Giving(翻译:Henry Huang)

===================================
译者介绍
Henry Huang,目前供职于趋势科技 Trend Micro(南京),负责集群运维的工作。

原文发布时间为:2015-09-28

本文作者:henrysher

本文来自合作伙伴DockerOne,了解相关信息可以关注DockerOne。

原文标题:Intercom的持续部署实践:一天部署100次,1次10分钟

时间: 2024-09-19 20:36:24

Intercom的持续部署实践:一天部署100次,1次10分钟的相关文章

自动化工具后起之秀Ansible的部署实践

本文讲的是自动化工具后起之秀Ansible的部署实践,从早期手动加脚本的部署方式,到后来自动化工具(chef, puppet, saltstack, ansible等)的出现,再到如今DevOps的盛行,企业应用部署正式进入平台部署阶段,CD(持续部署)已经成为企业对应用部署的标准需求,运维的交付也不再是以周或天为单位,而是以分钟为单位. 本文主要介绍自动化工具Ansible,及其在普元DevOps平台中的应用部署和日常应用部署中的实践. 本文目录: 一.如何选择合适的自动化工具? 二.Ansi

RTC4和IBM UrbanCode Deploy部署实践

本文讲的是 : RTC4和IBM UrbanCode Deploy部署实践   , [IT168技术]DevOps是一组过程.方法与系统的统称,用于促进开发(应用程序/软件工程).技术运营和质量保障(QA)部门之间的沟通.协作与整合. 它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作.可以把DevOps看作开发(软件工程).技术运营和质量保障(QA)三者的交集.本案例介绍了软件研发过程中通过RTC和UDeploy实现构建和部署WebSphere应用程

DockOne微信分享(一三二):58 赶集基于 Docker 的自动化部署实践

本文讲的是DockOne微信分享(一三二):58 赶集基于 Docker 的自动化部署实践[编者的话]随着 58 业务的发展,机器和服务数量也日益庞大,在多环境下,服务的管理和依赖难以维护.基于 Docker 带来的技术红利,我们借助 Docker 和 Kubernetes 提供了镜像的自动打包,单一镜像在测试-沙箱-生产-稳定四个环境的流转,以及测试环境统一的 Nginx 入口.至此,开发同学可以不再为资源和环境问题困扰,提高了生产效率. [3 天烧脑式容器存储网络训练营 | 深圳站]本次培训

②云上场景:众安保险,两地三中心容灾部署实践

众安保险是首家互联网保险公司,也是第一家将全部业务系统搬上云计算平台的金融企业.通过使用云计算技术,仅用5个月的时间就实现了两地三中心的容灾部署,并实现对海量互联网业务的支持,云计算相对于传统IT的优势一览无余.   其全部核心业务系统已经上云,包括:渠道接入平台.保单处理系统.电子保单系统.财务系统.B2C系统.官方系统.清算结算系统.商业智能分析系统.OA系统.IT监控管理系统.IT运维服务系统等各种系统,并且还在不断的进行扩展核心系统.通过两地三中心的部署实现高可用性和容灾的管理.并通过生

基于超融合架构的容器云管部署实践

作者介绍 张扬,DaoCloud售前工程师,致力于企业IT环境中容器化.超融合和云计算方面的需求分析,方案设计和技术支持.曾任职IBM AICS云服务项目并负责Cloud Infra和DevOps相关工作.Nutanix社区活跃用户,个人微信号:小张烤茄.   随着云计算的逐步落地,容器化和超融合等技术开始风靡整个IT圈.本次分享主要从技术层面讲述云计算环境中容器化和超融合的双擎工作模型.    一.超融合概念   超融合基础架构(Hyper-Converged Infrastructure,或

SQL Azure运用最佳实践进行数据库部署(2)

接上文:SQL Azure运用最佳实践进行数据库部署(2) 对于运行一个较长的事务,或者说该事务在连接的情况下被空闲的时间较长,SQL Azure就会切断现有连接.如果为了避免被SQL Azure切断,就必须在5分钟以内解决以上两个问题.就短短的那5分钟时间,你将如何快速的去处理呢?这就需要你在最短时间内保持连接打开避免闲置事务.当你执行完一条命令是,赶紧在有限时间内关闭连接同时把链接返回到池中. 演示代码如下: using (SqlConnection cn = new SqlConnecti

阿里云VPN网关部署实践

摘要: 2017年5月23日,在云栖大会·成都峰会上,阿里云推出VPN网关,为企业构建混合云提供了新选择.在VPN网关的支持下,企业可以在几分钟内完成企业数据中心与阿里云VPC之间的互联,大幅降低了企业成本的同时,还获得数据传输安全性.   VPN网关是很常用的网络服务,不管是Site-to-Site VPN,还是Client-to-site VPN都经常用到.阿里云本次发布的VPN网关是IPSec VPN,支持Site-to-Site,非常适合用户线下IDC和云上VPN构建混合云.本文介绍阿里

Jenkins与Docker的持续集成实践

本文讲的是Jenkins与Docker的持续集成实践[编者的话]持续集成(CI/CD)是一种软件开发实践.用于帮助团队成员频繁.快速的集成,测试他们的工作成果,以尽快发现集成错误. 更频繁.更早的集成意味着更早的发现问题.通过持续集成,及时发现和解决代码故障,提高代码质量,减少故障处理成本等等. [3 天烧脑式基于Docker的CI/CD实战训练营 | 北京站]本次培训围绕基于Docker的CI/CD实战展开,具体内容包括:持续集成与持续交付(CI/CD)概览:持续集成系统介绍:客户端与服务端的

基于Docker的Jenkins持续交付实践

讲师介绍  叶峰 有容云资深前端开发工程师   现负责有容云容器云平台Web架构设计和CI(持续集成)产品的研发 拥有丰富的Web前端开发经验.   主题简介: Jenkins pipeline基础概念 Jenkins pipeline如何带来工作便利 基于容器的Jenkins CI流程 Jenkins.Docker.Kubernetes整合的集成部署   传统交付方案   传统我们的项目开发模式是产品调研提出需求,开发团队研究决定开发方案选型.然后开始一个周期的开发,模块开发完成之后开始模块间