> 作者 João Miranda ,译者马凯 发布于 2014年4月1日
[DanielSchauenberg](https://twitter.com/mrtazz)在[伦敦QCon](http://qconlondon.com/)大会上描述了[Etsy](https://www.etsy.com/)是如何做到每天50次部署的。Etsy以其DevOps和持续交付的实践而闻名。一个完全自动化的部署管道、全面的应用监控和基于IRC(互联网中继聊天)的协作是能达到这个变更频率的同时又保持最小风险的重要因素。
Etsy的开发策略是反复围绕着做许多小的、连续的变更。这样做的一个直接后果就是需要每天做很多次部署。用DanielSchauenberg的话来说,在任何时刻每个Etsy的开发人员都需要知道下面这个问题的答案:“我现在有足够的信心来部署这个变更吗?”。为了能够每次都可以轻松部署,Etsy采取了一系列的工具和做法:强制基于IRC的沟通、开发者虚拟机、持续集成、一键式部署、全面的应用和系统监控、对于开发和运营团队都采取免责怪的事后检查(post-mortem)和随叫随到的政策。
每个开发人员都拥有自己的通过[Chef](http://www.getchef.com/)配置的[KVM](http://www.linux-kvm.org/page/Main_Page)(基于内核的虚拟机)。在线上运营中使用的[cookbooks](http://docs.opscode.com/chef_overview_cookbooks.html)也同样地用在了开发人员的虚拟机中,这意味着每个开发者都有自己完整的Etsy栈。任何人都可以通过[VirtualMadness](http://codeascraft.com/2013/09/23/lxc-automating-containers-aka-virtual-madness-part-2/)(一个可以实现整个过程自动化的Web应用)来提供一个虚拟机。
在持续集成方面,Daniel解释了[Try](https://github.com/etsy/TryLib)是如何成为所有过程的核心。Try是一个工具,它允许开发人员在[Jenkins](http://jenkins-ci.org/)(在Etsy中使用的持续集成工具)中[测试他的代码变更](http://codeascraft.com/2011/10/11/did-you-try-it-before-you-committed/),而不需要先提交到trunk中。Try有助于保持trunk干净从而实现可部署,而同时让开发人员能够快速、可靠地测试他们的变更。CI(持续集成)集群必须强大到足以支持150名工程师,以及每天超过[14000](http://codeascraft.com/2013/09/23/lxc-running-14000-tests-per-day-and-beyond-part-1/)[个测试集的运行](http://codeascraft.com/2013/09/23/lxc-running-14000-tests-per-day-and-beyond-part-1/)。[LXC](https://linuxcontainers.org/)(Linux容器)会平衡工作的负载,它们还提供了隔离机制,确保不同测试的执行之间不会冲突。
部署管道会经过Princess,或者工作台,这是一种上线前的环境。Princess的所有意图和目的就是上线环境,但只有Etsy的员工可以访问它。[Deployinator](https://github.com/etsy/deployinator)是由Etsy构建并使用的部署工具,提供一键式部署。
配置标志,也被称为功能标志,是部署过程中的一个主要组成部分。[通过其功能API](https://github.com/etsy/feature),Etsy能够做[A/B](http://en.wikipedia.org/wiki/A/B_testing)[测试](http://en.wikipedia.org/wiki/A/B_testing),即完全启用或者禁用某一功能或一个给定功能的变体。
监控是Etsy团队建立信心做持续交付的关键。开发人员做自己的功能监控,而且每个人都可以通过仪表盘看到所有的监控图表。Etsy具有这样一个策略,在默认情况下所有可以被绘制的信息都会被制成[图表](http://shouldigraphit.com/)。随着时间的推移,指标的数量一直稳步增加,所以Etsy建立了[Kale](http://codeascraft.com/2013/06/11/introducing-kale/)来帮助检测异常模式。所有的日志都可以通过[Supergrep](https://github.com/etsy/supergrep)展现出来,Supergrep是一个基于Web的日志展示工具,这增加了日志的信噪比。
IRC是贯穿Etsy的主要沟通工具,也是Etsy协作文化的关键。里面有很多不同的聊天室,每一个都具有特定目的。例如,在聊天室#warroom中仅允许中断事故有关的会谈。聊天室是用来协调调查,讨论应对措施和解决方案监控的。与其他的聊天室一样,#warroom是个鼓励新工程师们潜水的地方,因为这些聊天室被认为是学习的好地方。
每次中断发生,或接近中断的时候,所有人被邀请来做事后检查。事后检查是一个重要的文化活动,如果财务和支持人员需要,他们也可以参与。事后检查是为了成为一个学习的机会,所以它们不应该包含责备。所有事后检查相关的信息被记录在[Morgue](https://github.com/etsy/morgue)里面:日期、严重性、IRC日志、图表和补救措施。Morgue是Etsy为了保存事后检查记录而特别构建的另一种工具。
对于运营、开发、支付和支持部门的员工都采取随叫随到的政策。开发人员通常轮流地在每四个星期里的某一周提供随叫随到的支持。该政策的目的是让每个人都意识到上线产品每天所面临的问题,使他们能够在开发新功能或改进现有流程时考虑到这些问题。
Etsy拥有约60万的月访问量和每月15亿页面浏览量。
**查看英文原文**:[HowEtsy Deploys More Than 50 Times a Day](http://www.infoq.com/news/2014/03/etsy-deploy-50-times-a-day)
感谢[崔康](http://www.infoq.com/cn/author/崔康)对本文的审校。
查看原文:[Etsy](http://www.infoq.com/cn/news/2014/04/etsy-deploy-50-times-a-day)[是如何做到每天50](http://www.infoq.com/cn/news/2014/04/etsy-deploy-50-times-a-day)[次以上部署的](http://www.infoq.com/cn/news/2014/04/etsy-deploy-50-times-a-day)