2020年11月27日,全球运维大会GOPS上海站开幕。会上,腾讯高级工程师周仕林发表了题为《腾讯 TAPD DevOps 开放生态最佳实践》的主题演讲。文章整理自周仕林在GOPS大会的演讲。
以下为演讲实录:
大家上午好,我是来自腾讯TEG的周仕林,今天主要跟大家分享的主题是腾讯TAPD DevOps开放生态最佳实践。我将从三方面做分享:
1)腾讯精益敏捷驱动持续交付;
2)腾讯研发效能进化之路;
3)腾讯敏捷研发平台DevOps研发总线解决方案。
腾讯精益敏捷驱动持续交付
根据2019年腾讯敏捷研发数据报告,腾讯研发人员占腾讯员工总数66%,每年新增研发项目超过3500个,新增代码行数12.9亿,说明腾讯以研发作为核心生产力,持续保持产品竞争力。
其中,60%的项目团队规模在20人以下,47.8%的项目迭代周期在1周之内发布,可以看出腾讯交付的速度以及采取的极速模型,28%的需求可以在1天内得到响应,平均每天完成用户需求3802个,每周构建80万次,46%的bug在1天内得到解决。
这些数据的背后支撑的研发体系又是怎样的呢?答案就是作为腾讯产品研发的核心理念——敏捷。
说到敏捷,先讲一个背景故事。2006年开始,腾讯CTO Tony 张志东先生前往美国与 Google、IBM 进行交流,将敏捷的文化带回了腾讯。敏捷在这14年里落地、生根、发芽,形成了腾讯自己的敏捷文化:以用户价值为依归,敏捷迭代,小步快跑,灰度验证,用户参与,持续交付,拥抱变化。
根据敏捷理念,我们形成了持续交付模型。该模型由两部分构成——研发管理实践和研发工程实践。其中,研发管理实践是提炼并融合了Scrum、XP、FDD等主流的敏捷研发思想;研发工程实践是从研发、交付等视角出发,通过内检质量,持续进行 CI/CD 的建设。无论是研发管理还是研发工程实践,团队有一个共同的目标,就是快速高质量地交付用户价值。
所以不应该仅仅关注开发功能,同时还应该关注所交付产品业务正确性,以及如何以有限的资源快速验证和解决业务问题。也就是说,不断探索发现真正要解决的业务问题,挖掘产品价值,通过快速敏捷迭代实现解决方案并从真实运营反馈中收集数据,来验证该问题是否得以解决。这是一个从业务问题出发,到业务问题解决的完整业务闭环,可以通过价值探索和快速验证来快速交付用户价值。
腾讯研发效能进化之路
腾讯最近一年内在研发效能里面做了哪些工作?
首先,团队一直保持两个目标:
1) 始终保持敏捷,以及持续交付,一切以用户价值为依归;
2) 持续改进DevOps实践和工具。
基于这个思路,第一要做到持续敏捷化、数字化、一体化、智能化;第二是在流水线方面要从传统的流水线的模式进化到生产线研发模式;第三是要结合IM和安全形成Dev Chat Sec Ops 全方位腾讯 DevOps工具和实践。
1.研发流程进化 - 从“流水线”到“多样化生产线”
传统的研发流程模式就是流水线,从拿到开发任务之后就开始代码管理,持续集成,自动化测试,到最后发布。但是这种 DevOps 并不能形成研发的闭环,发布的代码也无法满足用户的价值。需要从流水线进化到生产线的模式,从需求管理到运营反馈形成研发全流程闭环,这样才能快速交付用户的价值。
在生产线模式研发过程中也会面临差异化的管理。和下图中产品经理面对的难题一样,腾讯在研发过程中也会频繁遇到跨团队、跨组织的协作方式,特性团队中成员角色越来越丰富,每个小组以及每个成员角色类别之间工作流程完全不一样等问题。
比如,常规需求涉及到设计师和产品体验,而技术需求就只需要测试同学验收就可以发布了。在这种差异化的研发生产流程下,产品经理很难在同一个项目下进行统一管理。这也是腾讯在近年尤其遇到的痛点之一。
应该如何解决呢?答案是采用项目多工作流的方式。每个项目都支持多个工作流,在项目迭代下差异化统一管理,精细化的度量,实现端到端的并行流水线交付,从而实现生产线式交付。
2.自动化一切
如何打通研发完整的闭环?答案是流程自动化。借助流水线的思维,抽象出触发器 满足条件 执行动作的编排模式,由事件触发来驱动任务的自动化。这样可以将很多内部工具链平台打通,提升跨平台协作效率。
基于此,团队开发了自动化任务平台,将流程中这些平台的功能封装成业务对象,如需求、代码、流水线、用户反馈、企业微信等;并将平台功能抽象成原子化的任务,如创建需求、提交代码、创建分支、执行测试用例、执行流水线、发送企业微信通知等;自动化任务底层通过任务引擎来驱动,支持任务编排、事件调度和任务执行。
接下来看看自动化任务平台具体怎么做的。针对一个项目里面的需求,包括技术需求、运维需求,还可以跟流水线、任务、企业微信等等,通过这个平台可以将与其他的这些内部的平台进行打通,同时还可以形成自由组合。只要有一个平台变更,就能完成其他平台的变更动作,这样可以将多数工作流实实在在地体现在自动化场景里。
下面具体来看两个自动化任务的场景:
第一个场景,开发同学提交MR评审后,若评审通过,则需要扭转需求单。比如扭转到代发部,或者扭转到代验收,同时还要到开发群或者需求群通知相应的产品做进一步验证;
第二个场景,流水线发布成功以后,这个迭代上面所有的需求应该扭转到已发布,等待产品同学或者测试同学逐一进行扭转,同时在群里通知相关人员进行需求的验收。
这里就会出现一个很大的问题,那就是所有的工作都需要手动,且很可能产生遗漏。但通过自动化任务平台配置这两个任务以后,就不需要开发同学与测试同学,去做相应的平台上的操作。只要有MR事件进来,就可以进行自动扭转。同时,需求发布完成以后,也可以直接进行扭转。
在自动化一切的思想之下,自动化任务平台就能帮助团队解决很多重复性的劳动力,加快研发流程工具的效率。
DevOps&Chat - IM
在自动化一切的思想之下,疫情期间的腾讯在IM上面做了相关实践。
比如在需求和缺陷的状态流转过程中,流转到「开发中」的时候,可以一键创建需求的沟通群,同时当需求、缺陷等对象发生状态变更、字段变更或者需求描述等内容变更时,这些变更也可以及时通过IM进行推送。这样,研发流程中等重要工作信息可以通过IM实现及时触达和沟通。对于管理者来说,不需要到平台上通过报表查看当前迭代的需求进展,只用在IM里推送一个消息即可查看等等,就能在IM里面直接实现团队的管理和工作。
同时,团队在智能化方面也做了很多探索。比如在用户反馈群、需求沟通群等聊天群里直接一键创建需求或者推荐单等等;又比如对于平台上所创建的视图、缺陷分布或者进度、质量报表,也能通过IM直接查询到,还可以定时做相应报表的推送。
此外,团队在研发风险预警方面也做了相关工作。比如当前迭代里设置了截止时间,一旦达到了设定的5个小时之前或者1天之前,就能对相关开发做风险预警。如下图右所示,有一个需求扭转提醒功能。一旦有延期风险可能,即可推送给开发,进行扭转需求或者填写风险的原因等。
在运维方面,也做了相关工作,比如直接跟机器人交互做执行流水线以及查看机器监控等等。
DevOps&Chat - Meeting
在疫情期间,腾讯内部很多团队在线上的会议,将DevOps进行实践,比如运营规划会议、IPM会议、测试会议、每日站会等等,通过自动化任务平台,可以做到设定早上9点30,设置一键每日站会等等,Meeting 贯穿着整合 DevOps 研发全过程。
DevOps&Sec - 工具链
在研发流程里,安全也是非常重要的,腾讯内部也对此做了相关实践。比如在需求规划阶段会有安全的培训,包括安全规范的制定以及每个语言编码规范等等。
在编码阶段,会对于开发同学所引入的第三方包做一些检测,如果说你有风险的版本或低,会提醒你要升级。在变异里面同时植入相关的插件,比如动态扫描等等,以及安全架构,设置质量红线和安全红线。在运维方面,线上的服务极板上都是默认采取腾讯直研的tlinux做加固,服务安全扫描,可以做到可追溯。提到安全,让安全和质量前置,像刚才说的要提前在流水线设置质量的红线,包括安全的红线。在流水线里面做语言上面的代码度量等等。
新代码文化
在公司开源协同的新代码文化下,团队在开发过程中强调将质量和安全前置,让安全尽早的参与,防止有安全漏洞的代码合入到主干;鼓励内部开源,流水线中增加代码安全扫描插件,设置质量和安全红线,对研发的代码进行代码度量,例如利用 CodeCC 和 CodeCog 做代码扫描,啄木鸟安全扫描,以及客户端加固,授信源管理,如果依赖有风险的库会有安全提醒。
研发效能数字化
说到前面的研发流程,最终落地到研发效能的数字化,这里也给了一些通用指标,度量的目标是未来做改善的,发现团队相关的问题。
这先是团队习惯,无论是主干开发还是CI频率,还是红灯修复时间;第二是开发质量,包括代码质量、缺陷密度、缺陷重复打开率,一个缺陷单重复被打回,说明这个开发同学对于边界的场景考虑,包括流程或者逻辑是不清晰的,这也是开发的质量;第三是在测试方面,包括测试的覆盖率,UI测试等等;第四是交付吞吐量,包括部署频率,部署频率越快,说明交付是非常快的,另一个重要指标是变更的前置时间,从需求的提出到需求的交付耗费的时间越短,说明团队交付能力越强。
在腾讯内部,会植入一个更细化的报表来分析这个需求从规划中到交付,每一个状态与状态之间的时长分布,可以帮助团队的项目经理去深入挖掘到每个流程的问题。其中,在交付稳定上主要有两个指标,即服务恢复时间和变更失败率。
有了这些指标,最终落地相当于把研发数据度量和可视化出来,所以TAPD了提供定时报告、仪表盘的方式,这些也是团队通常开站会时常用到的工具,能够让大家了解目前团队开发的进展,包括完成的工时等等。
腾讯敏捷研发平台DevOps研发总线解决方案
在敏捷研发模式驱动下,为了更好的落地 DevOps 实践,腾讯敏捷研发平台提供了 DevOps 研发总线的解决方案。这个解决方案的目标是实现一站式研发的数据池,让整个交付流程实现自动化,提供研发效能度量与持续改进的能力,最终将这些工具集成变成标准化。腾讯敏捷研发平台DevOps研发总线解决方案
具体要怎么实现?可以通过研发总线,从反馈到发布,用开源的工具包括大家快速实践DevOps。同时在这个过程中,通过刚刚提到的自动化任务,将研发流程形成自动化,就可以将这些平台更加方便串联起来,最终通过落地数据,就能做到数据度量和持续改进。
此外,团队在需求和代码之间做了实践。代码的分支或者提交都能给需求进行绑定,比如在追溯的时候,需求影响到哪些代码或者哪些代码影响到缺陷和需求,都能实现一键追踪。
同时,通过智能提交指令实现代码 commit 即可更新需求单、填写工时。将这个流水线的数据落地下来之后,就可以打通项目管理数据和流水线的数据,这样可以提供可视化的数据帮助大家在一个平台上面进行操作和查看。
针对每次构建,所影响到的需求和缺陷,都直接可以通过这个界面查看到。产品和测试通过这里,可以快速知道这次构建所影响到的业务范围,运维也知道这次构建影响到哪些需求特性。
针对这一次构建所编译出来的构建产物可以做版本管理,可以进一步做回归测试的工作。
质量报告可视化,测试结果可录单,bug全程跟踪管理、质量分析效能提升。
同时提供数字化度量的能力,通过那些指标落地到统计报表里面,通过原子表、报告、仪表盘等等,提升数字化研发效能,驱动研发效率持续改进。
TAPD加入了一个类似于门禁的功能,状态在变更的过程当中一定满足相应的条件,比如开发,底下的任务必须达到已完成,必须流水线执行通过的,是不是代表这个需求可以扭转到下一个状态,能扭转,状态相应设置一个门禁,同时提供一个自动化执行的功能,也就是说你扭转成功以后,还可以发送邮件,还可以发送企业微信通知,将这个推送到其他平台做数据交互等等,既能保证状态门禁的过程,同时还能做自动化任务的工作,既能保证研发流程自动化,也可以加速价值流移动。
腾讯敏捷产品研发平台
借这个机会跟大家介绍一下TAPD。TAPD是Tencent Agile Product Development的缩写,TAPD 诞生于2006年,承载着腾讯敏捷研发体系十余年的发展成果, 是腾讯敏捷研发文化的具象化。十余年来,腾讯每一款成功的产品背后,都离不开TAPD平台的支撑,TAPD在腾讯研发使用率达到95%。
TAPD 于2017年正式对外提供服务,输出腾讯研发模式和研发方法和实践。对外开放三年时间,TAPD通过口碑获得的“自来粉”客户达数十万家,覆盖数十个大类行业。
在疫情期间,TAPD开放企业版申请渠道(免费),并且在短短三个月时间里帮助数千家企业完成了线上办公支持
今年9月,腾讯正式推出TAPD小微企业扶持计划,向30人以下的初创企业及团队提供免费的TAPD企业版服务,欢迎大家与TAPD一起打造一个更加敏捷开放的生态。