腾讯始终秉承着敏捷迭代,小步快跑的理念,快速准确高质量的交付用户价值。腾讯是如何通过不断的演进来提升交付能力的?本文将为大家介绍腾讯DevOps的演进过程。
腾讯研发模式的两次变革
近几年,腾讯通过内部的开源协同策略,不断整合内部优秀的基础设施工具,形成了一整套完善的基础设施。在协作管理方面,有TAPD、企业微信、腾讯会议来支撑团队的协作沟通和项目管理;在测试管理方面,有WeTest,TEG智研等;代码方面有腾讯工蜂、持续集成上有腾讯CI、配置管理七彩石、统一的腾讯软件源、环境管理有TKE支撑业务上云……
随着这些基础设施的不断完善,腾讯的研发模式经历了两次比较大的变革。
第一次变革,是敏捷研发到DevOps流水线模式的演变。这一阶段,借助流水线工具,拉通从代码提交到持续集成,自动化测试,最后部署上线的整个过程,形成一条以代码为起点的持续交付流水线。
很多企业都在实践流水线模式。但是,这种研发模式从用户价值交付的角度上看,并未形成完整的研发闭环。需求管理、运营反馈 与 交付流水线 之间存在明显的断层, 需要依靠人工来做很多跨平台维护; 并没有触及研发过程中,人跟人、人跟工具的协作。特别在今年疫情背景下,主要都是通过线上进行沟通协作;DevOps流水线模式,已经无法满足快节奏高质量的交付和跟踪。
因此,腾讯发生了研发模式的第二次变革,即在坚持敏捷迭代和持续交付理念的基础上,基于敏捷化,数字化,一体化,智能化的思路,不断对研发模式进行探索。从“流水线模式”演变到了“生产线模式”。
如何理解生产线模式?生产线模式强调以下几点:
1. 以自动化一切为核心驱动力;
2. 拉通需求管理到运营反馈,形成研发全流程闭环;
3. 结合腾讯的安全能力,形成质量和安全红线;
4. 结合腾讯IM,群机器人等,探索智能化协作场景。
一、自动化一切
理解生产线模式,首先要理解“自动化一切”。
整个研发流程中各个环节涉及到的工具和平台都是很多的,只有平台之间的数据能够无障碍的快速流动,实现研发流程的自动化,才能切实提升,整个流程交付的效率。
针对自动化,TAPD团队抽象出了一套自动化引擎,以“事件触发 条件判断 动作执行”的编排模式,由事件触发来驱动自动化,打通内部各个工具,提升跨平台协作的效率。
具体是怎样的?如下图,把个工具都包装成了平台的一个对象,比如需求、史诗、代码、流水线、企业微信、WebHook,每个对象都有自己的触发事件、条件和动作,像创建需求、流转需求、执行流水线等等。任何平台都可以是事件的发起者和执行者,团队可以根据需要去配置编排这些任务,实现研发数据在研发流程中的自动流动,形成符合自己团队的交付生产线。
二、研发流程自动化
拿腾讯某个业务团队研发流程举例:
- 需求在规划中时,产品对需求内容进行补充 和排期
- 开发接到需求,开始编码时,将需求转到 实现中
- 开发完成,代码合并成功之后,将需求转到自动测试
- 负责集成的同学,再通过 CI 流水线的验证结果,将对应的需求单,都转到功能验收,移交给产品和功能测试同学手里
- 产品和测试验收通过之后,再转到验收通过环节,等待运维同学的部署上线
- 运维同学上线之后需要根据代码的发布范围,将对应的需求单流转到已上线状态
这个过程中有很多环节的需求单移交都是依赖人工的。甚至有部分环节是需要等待其他系统的处理结果,来决定是否移交。腾讯很多团队在实践中发现,这个操作过还经常会遗漏操作或者延迟,导致需求移交不及时。
研发流程自动化之后,实现中的环节:
- 开发编码完之后,要向系统提交 MR之后,我们就可以进行配置
- MR评审通过时,自动的去移交需求,这样开发就只需要关注编码和 MR的提起
- 自动测试环节,配置需求单到达这个状态时,自动去触发流水线
- CI流水线成功时,自动把单移交到功能验收环节
- 验收通过后,对于不需要等发布班车的需求,配置自动触发发布部署流水线
- 部署完成后,自动将需求单移交到已上线状态
这些自动移交的过程中,我们也可以配置自动给需求填写对应的处理人。配合企业微信邮件等通知,及时的知会到处理人。
整个流程中,只有必须的编码 / 功能验证环节,是需要人工参与介入的,其余过程都通过流程助手变成了自动化的过程。这就是自动化一切的作用,减少手工操作,消除不必要得浪费。同时,加速流程快速推进,提高研发效率,同时也保障度量的准确性。
三、DevOps&Sec
当研发生产线快速自动流动起来之后,如何更好的保障DevOps安全?
在公司新代码文化背景下,团队越来越强调将质量和安全前置,让安全尽早的参与到整个研发流程中。主要包括以下几个方面:
- 首先,根源上尽量防止有安全漏洞的代码合入到主干,发布上线,同时鼓励内部开源
- 此外,在流水线中增加代码安全扫描插件
- 设置质量和安全红线
- 自动对研发的代码进行代码度量,比如利用 codecc 和 codedog 做代码扫描,啄木鸟安全扫描
- 客户端加固,授信源管理,如果依赖有风险的库,会进行安全提醒
- 除此之外,安全也深入到整个DevOps环节中,会针对每个环节进行加固和优化:
- 提前制定安全规范,做安全培训
- 在编码阶段,提供腾讯的可信软件源,团队内加强代码 Review,开发库做安全扫描
- 在编译阶段,流水线中也提供各种典型的插件,静态代码扫描,客户端安全加固,设置质量与安全红线
- 在部署方面,统一使用 做过内核加固的 tlinux,对线上服务做一定的安全扫描,对运维访问操作全流程记录追溯等
四、DevOps&Chat
在自动化一切的想法之下,腾讯也在 DevOps 与聊天工具上进行思考和实践。
疫情期间,团队成员无法做到面对面沟通, IM 起到了关键作用。在沟通迭代、需求、缺陷时可以通过自动拉群进行讨论,同时需求、缺陷状态变更或者数据变更都能通过 IM 及时提醒;可以通过机器人定时发送统计报告,管理者也可以通过 IM 触发团队及工作。
IM 也在研发智能化方面进行了探索,如通过聊天内容进行缺陷和需求的创建,视图、进度、质量报表定时推送;在智能研发风险预警方面,可以定时推送延期需求提醒,遗留BUG统计提醒等;同时可以通过指令来操作一些工作,如运维相关工作的发布、查看机器监控等。
在疫情期间,团队主要通过线上会议来进行沟通,比如产品规划、IPM 会议、测试计划会议、每日站会、发布评审会议、验收和回顾会议,例如利用自动化任务平台设置定时发起每日站会,IPM 会议等等,Meeting 贯穿着整个 DevOps 研发全过程。
TAPD DevOps 研发总线的解决方案
为了更好的落地 DevOps 实践,腾讯敏捷研发平台提供了 DevOps 研发总线的解决方案。该解决方案的主要目的是为了打通项目管理和工程数据,提供一站式的研发数据池,实现交付全流程自动化,通过研发数据池提供丰富的研发效能度量,同时也支持标准化的 DevOps 工具集成。
更多关于DevOps 研发总线解决方案的具体实践就不在本文赘述,详情可以移步《腾讯 TAPD DevOps 开放生态最佳实践》学习。
本文整理自腾讯TEG DevOps系统架构师许树群于 Gdevops 2020 全球敏捷运维峰会上的主题分享。