在 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),此外,还包含在生产环境的对真实用户的模拟来达到测试的目的。
主题三:包管理 & 持续交付助跑研发效率(视频,MP3 和 Slides 等资料下载)
来自腾讯搜搜的陈小光分别从 SOSO 的 CI 实践、包管理概念以及 CI& 包管理结合的实践等角度来分享搜搜在持续交付上的经验。陈小光谈到了搜搜构建脚本统一的解决方法:
- 步骤分离 -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 期所有百度技术沙龙的演讲视频和资料等,感兴趣的读者可以直接浏览阅读。
活动推荐:
2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。
评论