在 10 月 29 日由百度主办、InfoQ 策划组织实施的第19 期百度技术沙龙活动上,来自百度项目管理部高级架构师 @乔梁、ThoughtWorks 咨询师 @冯智超分别分享了各自在持续交付领域所取得的成果及经验,话题涉及百度在持续交付及 DevOps 上的经验分享,以及使用云计算和虚拟化技术实施持续交付等。本文将对他们各自的分享做下简单的回顾,同时提供相关资料的下载。
主题一:持续交付的魅力(演讲稿下载)
来自百度项目管理部的乔梁第一个为大家分享,分别从版本发布、开发模式、测试、部署等角度对比了百度在实施持续集成、持续交付前后的变化:
- 由 3 个月的大版本发布转变为每三周就有一个小版本发布
- 紧急修复的情况也大量减少
- 紧急需求也由以前的数量,降低到现在没有紧急需求
- 持续继承前的多分支并行也转变为现在的主干开发(只在发布时拉分支)
- 以前的手工测试、手动部署现在也转变为自动化实现
主要的思想是“一切皆版本控制”,包括应用配置信息、环境配置信息、数据信息、环境标准化以及单一部署脚本等。同时要有共同的目标,通过频繁、高效地沟通,来保障产品的质量。接下来乔梁分享了项目实施中的一些体会:
- 软件的发布过程必须是可重复、可信赖的
- 把几乎所有环节都做成自动化
- 把所有内容都纳入版本控制
- 让痛苦提前,并不断练习
- 内建质量
- 完成”就意味着“已发布
- 所有人对交付负责
- 持续改进,需要耐心
- 只构建一次二进制包
- 在每个环境上都使用相同的方式部署
- 对部署结果进行冒烟测试
- 每种部署环境都应该尽可能相似
- 任何地方出现失败,都要立刻停工
然后介绍了 DevOps,他引用了 Wiki 上对于 DevOps 的概念:
DevOps 是一组过程、方法与系统的统称,用于促进开发(应用程序 / 软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作。
最后乔梁还强调,DevOps 是文化和工具的集合。并推荐了一些常用的自动化工具:环境设置工具(Puppet、Chef、ControlTier 等),应用部署及数据移植工具(Capistrano 和 DBdeploy),日志和监控工具(Splunk、Nagios、Munin)。
主题二:持续交付——使用云计算和虚拟化技术(演讲稿下载)
来自 ThoughtWorks 的冯智超首先调查了现场的 Dev 和 Ops 的人数比例,接着通过实际案例,分享了其在主导 DevOps 项目中的理解和体会。
冯智超首先通过实例说明了写产品代码与开发的区别:
代码只是开发的一部分,还有需求、测试、部署阶段,都需要有代码的编写工作。
由此引发出持续交付的价值在于,不是仅仅注重在“交付”,不是持续部署,而是能保证任何时刻都有可以产生价值的软件。接着冯智超指出了手工部署的一些缺点:
- 速度慢,无版本控制、不可重复、容易出错、无法进行知识分享
- 无法持续地做需要频繁做的事情,也同样无法保证所作事情的正确性
- 部署时间过长、过复杂,导致开发人员不愿意做部署,且反馈较慢
一个很直观的案例:当一个产品构建时经常报错,经常出现随机失败或是配置出问题,这就会导致大家降低对代码提交的要求,并掩盖了代码真实的 Bug,最终导致将 Bug 带到了 Pre-Production 的环境。同时,遇到问题时,开发人员很容易绕过(work around),导致经验不能累积传递、问题反复出现(尤其是对于那些有“经验”的程序员)。相比之下,自动化部署则具有以下特点:
- 部署过程代码化、部署代码是项目(软件)的一部分
- 可 One button Click 到任意环境
- 测试包含了对软件的测试以及对部署的测试
使用虚拟机、云平台可更方便的实现自动部署。此外,自动化部署检测了软件能否交付价值,部署的同时也是测试部署代码的过程。 一切皆代码,即所有东西(代码、测试、需求、配置、脚本等,都在版本控制中。冯智超还介绍了其部署流水线的过程:
- package 编译打包、单元测试、静态代码、rpm&deb 包
- standalone 环境测试,隔离外部组件,自动化验收测试
- EC2 环境测试,在云上创建所有组件,自动化集成测试
- pubish 发布 package 脚本,配置到团队的 packate source,进行快速反馈、增强信心。
此外,冯智超还谈到了流水线监控、如何模拟真实环境、云和虚拟化以及介绍了 Chef 和 Vagrant。最后冯智超谈到了他的个人经验:
- 自动化
- build 要快、稳定
- 环境要逐步接近生产环境
- 云平台、虚拟化会为持续集成提供方便
- 坚持原则、做正确的事情
Open Space(开放式讨论环节)
和以往的环节一样,为了让参会者能够有更多的时间进行相互的交流,本次活动依然设置了 Open Space(开放式讨论)环节。除了讲师乔梁、冯智超外,窦锦帅、翁翊成、张磊和卜伟强也参与了小组讨论。在 Open Space 的总结环节,几位嘉宾分别对讨论的内容进行了总结:
乔梁分享了“自动化测试”的话题,继续讨论了进行持续交付的重要性,同时还要培养有持续交付的能力,在具备持续交付能力后,才有可能快速的发布软件。在这个前提下,进行了关于自动化测试的讨论,包括控制自动化测试的成本(端到端的测试要少,由于 UI 变动较大,所以估计集成端到端的测试)、单元测试如何去做,去度量等。
冯智超分享了“部署流水线”的话题,主要讨论了部署流水线的过程,包括每一步应该做哪些事情,都能够带来什么好处,还包含常见问题的处理方式。
翁翊成分享了“传统团队如何实施持续集成”的话题,主要讨论了如何在一个很难去做单元测试、很难去实施自动化测试的环境下,如何去实施持续集成。介绍了一些相应的工具,软件包版本的区分,如何利用版本唯一性来确定发布的包,总而去驱动从开发到测试再到最终发布的流程。
窦锦帅分享了“自动化运维工具的应用”的话题,分享了各自在自动化运维中的经验以及如何利用自动化工具来实现更新。
张磊分享了“云计算”的话题,一起讨论了什么是云,云计算与物联网的关系以及当下比较热门的开源软件及应用。
卜伟强分享了“自动化测试”的话题,主要讨论了三部分的内容:1)自动化测试的前提及成本,2)如何去选择适合于自身的自动化测试工具,3)一起讨论了自动化测试的细节,尤其是针对 UI 的测试等。
会后新浪微博 ID 为 @哈尼的老虎的参会者分享了他的感受:
thoughtworks 一位讲师分享虚拟化及云基础设施在 devops 中的应用,场景很典型,提高效率降低成本;如何让 devops 落地,如何裁剪 devops 使之适合自己的 business context,特别是传统做企业应用的环境,互联网的经验可以借鉴。
此外,讲师 @乔梁 QL 也分享了参会感受:
今天有同学在 @百度技术沙龙上问如何在代码中使用开关机制?实际上,可以使用很多设计模式做开关,这里有一些例子。通过 @微盘 分享文件" Erik Sowa- Feature Bits LSSC10 final.pdf " 。
一位现场观众 @杨梅果果子也在微博中写到:
周六还是去了百度技术沙龙,1 点半到的已经很多人了,听了两场讲座还领了一本书,嘿嘿
虽然我已经有了本持续交付的英文版,不过有本中文的正好对照着学习谢谢 infoq 和百度哟
延伸阅读
1. 乔梁在 InfoQ 的专栏。
2.QClub 北京站,ThoughtWorks CTO Rebecca 谈 DevOps 和持续交付。
3.InfoQ 中文站关于持续交付的相关文章。
4.InfoQ 中文站关于DevOps 的相关文章。
有关百度技术沙龙的更多信息,可以通过新浪微博关注** @百度技术沙龙,或者加入百度技术沙龙微群 **,InfoQ 上也总结了过往 19 期所有百度技术沙龙的演讲视频和资料等,感兴趣的读者可以直接浏览阅读。
评论