在7月23日百度主办、InfoQ策划组织实施的第16期百度技术沙龙活动上,来自百度高级工程师乔梁、腾讯持续集成专家陈小光、FreeWheel工程经理党政法分别分享了各自在持续交付领域所取得的成果及经验,话题涉及百度在持续集成上的经验分享、FreeWheel的持续交付历程以及腾讯搜搜是如何将包管理结合到持续交付中的实践等。本文将对他们各自的分享做下简单的回顾,同时提供相关资料的下载。
\主题一:持续交付的魅力——百度持续集成经验分享(视频,MP3和Slides等资料下载)
\来自百度项目管理部的乔梁第一个为大家分享,重点介绍了“六步提交法”,六步提交法是根据业界多年实践总结的持续集成工作流程和规范,意义在于提高团队协作能力,高效开发软件应用,主要分为:
\\\
- 把代码从版本库中检出到本地\
- 为新功能或修改某个缺陷而修改代码,增加测试\
- 运行第一次本地验证\
- 验证无问题后,再次与版本库中的代码合并,运行本地验证\
- 二次验证无问题后,提交代码到版本库\
- 关注持续集成服务器运行完提交构建,直至其成功\
其中,有以下几点需要注意:
\步骤一:必须在持续集成当前状态为绿色(即成功)时,才能检出代码;
\步骤三:本地构建的目的是验证本人的修改没有问题;
\步骤四:由于在你修改代码时,别人可能会提交代码,所以要与这些线上代码合并;只有当线上持续集成当前状态为绿色时才能迁出代码进行合并。 此外,本次构建的目的是验证合并后的代码没有问题。
\步骤六:代码提交者要一直关注由自己的提交所出发的持续集成线上构建,直至其成功。如果失败,必须作为最高优先级任务对其进行修复。
\此外,乔梁还介绍了持续集成的概念及特点,持续集成如何开始,最初的方法就是分支策略,同时倡导主干开发,实时集成的方法。通过将需求划分成多个小功能来实现,这样在一个星期之内就可以开发测试完成一个小功能点,另外,还可使用配置开关进行隔离。
\最后,乔梁从主干开发、代码同源、分级测试、所有内容版本控制、功能开关以及一键式部署的角度总结了今天的案例分享。乔梁提出,要想让持续交付成为现实,需要做到以下几点:
\\\
- 持续集成和版本控制\
- 全流程自动化\
- 环境标准化\
- 通过版本控制一键式发布\
主题二:与大象共舞——持续交付高质量的产品(视频,MP3和Slides等资料下载)
\来自FreeWheel的党政法通过对开发过程中的四个关键阶段的介绍,说明了FreeWheel是如何通过技术手段应对挑战的。
\与大象共舞的含义是指,每个客户都很庞大,在项目的进展过程中,既要保证开发和项目实施的节奏,同时也要注意安全。换句话来说,在满足不同客户需求的同时,还要开发出高质量的产品。而FreeWheel采用的则是持续交付的方式来不断完善和发展产品。FreeWheel主要注重持续交付过程中的四个环节。下面分别介绍每一个环节和FreeWheel的尝试,持续交付第一步,确定自己的步伐(Mind Your Step):
\\\
- 资源是有限的\
- 不要害怕同客户沟通计划(提前一个月预发布通知、上线通知等,这样的话可以保证开发计划的按时进行)\
- 预设好客户的期望(事情不会像想象中的那么容易,尤其是涉及到很多外部接口开发和联调的情况,所以要通过持续交付的方式来同客户达成共识:有问题不可怕,会及时的改善)\
这一步很关键,尤其是对B2B公司来讲,但这种合作关系不可能一开始的时候就达成,需要慢慢的同客户建立信赖的关系。第二个环节是开发过程中的持续集成,FreeWheel采用的是Hudson做CI服务器配合自动化测试框架,并用邮件通知的方式实现。集成服务器中有几点需要注意:
\\\
- 统一的工具和库\
- 编码风格和语法检查\
- 对触发机制的检查\
- CI要和自动化测试相结合\
- 及时的将集成的结果自动反馈(邮件的形式)\
第三个阶段是产品的可控部署,在此阶段,FreeWheel分别采用了Staging、Phase Rollout配合自动化部署和快速验证工具,可以极大地降低新产品上线带来的风险,同时也保证了对客户的服务质量:
\\\
- Staging环境是生产环境的简化版,在物理上和流程上都保持与生产环境相同,唯一的差别仅仅是规模不同,因此,Staging是Production的一个彩排,用来验证升级流程的正确性以及用真实的流量来验证新版本。\
- Phase Rollout指的是分批次的部署,好处是在降低风险的同时增加了回滚机制,坏处是增加了部署的复杂度以及兼容性测试。\
最后一个阶段是在生产环境的持续测试,主要包括系统级别的监控(磁盘、CPU、IO以及网络等),外部监控(主要采用的Gomez),此外,还包含在生产环境的对真实用户的模拟来达到测试的目的。
\主题三:包管理\u0026amp;持续交付助跑研发效率(视频,MP3和Slides等资料下载)
\来自腾讯搜搜的陈小光分别从SOSO的CI实践、包管理概念以及CI\u0026amp;包管理结合的实践等角度来分享搜搜在持续交付上的经验。陈小光谈到了搜搜构建脚本统一的解决方法:
\\\
- 步骤分离-Build、UnitTest、AutoTest、CodeCheck\
- 制定规范-执行各步骤的编写规范\
- 功能提取-相似功能进行提取脚本实现\
接下来陈小光介绍了包管理系统的概念以及包管理系统提供的主要功能:
\\\
- 完整性校验(checksum)\
- 数字签名(signature)\
- 压缩存档(archive)\
- 版本控制(version)\
- 软件管理(find/install/upgrade/remove/configure)\
- 依赖管理(dependency,包括编译依赖和运行依赖)\
最后,陈小光介绍了统一的持续集成系统:首先从CM Server检出指定代码到编译集群,编译集群中执行构建任务,构建完成后通过调用自动化测试任务进行自动化测试,测试完成后会自动将测试结果返回到编译集群中。测试成功时,会再将编译包上传到包管理服务器,后续的测试包和安装包的安装都将基于这个包管理服务器。另外,陈小光还通过具体的实例描述了包管理和持续集成结合的流程。
\Open Space(开放式讨论环节)
\和以往的环节一样,为了让参会者能够有更多的时间进行相互的交流,本次活动依然设置了Open Space(开放式讨论)环节。除了讲师乔梁、党政法和陈小光外,SCM Life创始人孙常波,Fizzback工程师翁翔成也参与了小组讨论。在Open Space的总结环节,几位嘉宾分别对讨论的内容进行了总结:
\乔梁主要分享了企业内如何做好持续交付的话题,党政法小组主要围绕TDD及UT进行了讨论,陈小光小组讨论了如何让CI服务于整个开发流程的话题,孙常波则从配置管理实践的角度展开了讨论,最后第五组,由来自Fizzback的翁翔成分享了CI与Debian的安装包制作经验。
\会后新浪微博ID为@张权先生的参会者分享了他的感受:
\\\很有收获,特别是后面的分组讨论,乔梁的持续集成之路,人、流程、技术和工具很受启发。
\
此外,讲师@乔梁QL也分享了参会感受:
\\\
- 《持续交付的魅力》“六步提交法”中的两次本地构建中都做些什么?关键在于要在十分钟内完成,并给开发者一定的质量信心指数。在十分钟内能完成所有测试,就包括全部好了。如果办不到,那么通常是编译、打包、静态代码检查、所有单元测试、一些集成测试和少量系统级冒烟测试。\
- 《持续交付的魅力》以广度为主,但在OpenSpace环节与大家的讨论还算深入。感觉“持续集成” 这个主题被接受的程度远远高过两年前。\
延伸阅读
\1.乔梁在InfoQ的专栏。
\2.QClub北京站,ThoughtWorks CTO Rebecca谈DevOps和持续交付。
\3.InfoQ中文站关于持续交付的相关文章。
\有关百度技术沙龙的更多信息,可以通过新浪微博关注@百度技术沙龙,或者加入百度技术沙龙微群,InfoQ上也总结了过往16期所有百度技术沙龙的演讲视频和资料等,感兴趣的读者可以直接浏览阅读。