前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DevOps 前军:腾讯研发管理实践体系与工具平台探索

DevOps 前军:腾讯研发管理实践体系与工具平台探索

作者头像
DevOps时代
发布2018-10-08 13:39:47
1.8K0
发布2018-10-08 13:39:47
举报

DevOps是很全面的概念,站在某一角度或少只能代表一部分看法。特别在大型企业,不同团队有不同的职责,决定了各自会关注不同的方向。 本次会场可以说是DOIS主办方的一次突破性尝试,三位讲师来自腾讯的不同部门,日常工作也是各司其职。我们通过一个上午的分享,从研发过程链条的前中后三个不同的视角来分享对DevOps的解读和看法。 本文是DOIS大会腾讯专场研发管理方面的分享内容。

笔者来自腾讯技术工程事业群研发管理部,该部门提供的服务支撑了全腾讯业务,本次分享聚焦于 DevOps 中的敏捷研发和配置管理。

很多朋友问起说腾讯这么大的公司,那么内部的研发是怎样做的,研发效率是怎样保证的?

我们在以前的分享也提到过,腾讯有种类繁多的广泛的产品线,产品数量多。下图列出了一部分,更多的产品是没能列上的。

在这些产品背后是腾讯15,000~16,000 名技术人员,这里包括的不只是开发,也包含测试和运维。而产品员工大约是6000左右,包含了所有的产品经理、运营、游戏策划和项目经理。合计总人数大约22,000左右。

从研发效率来说,单位人员所提供的产品能力,体现了整个集团的人均研发效率。腾讯用数量并不太多的员工人数,维持了如此多款不同产品,我把其中研发效率的关键因素归结为4点:

1. 雇佣杰出的研发和产品人员 2. 由下而上自组织的敏捷 3. 自动化的研发工具体系 4. 科学高效的质量控制能力

今天的分享着重来看第二点,也就是“敏捷”对于腾讯集团这样的大型企业代表着什么。

研发的现状

研发过程中主要有两种角色,分别是产品和研发。产品经理把需求排进需求池,和研发勾兑好,经过线上线下若干轮pk,划分优先级排进迭代,研发团队经过内部沟通,做好架构设计,然后把需求拆分给不同的人来实现,也就是任务分配。

之后,开发开始写代码,写代码的过程中又需要各种各样的沟通,比如有些依赖或者技术接口。

再比如产品需求发现有些之前没想到的疑问回去勾兑。等到功能大致开发好,测试开始介入,这个时候产品、开发和测试坐在一起,又要核对测试的需求,在测试过程当中还要勾兑开发环境。

最后,在测试当中发现的问题,又要和产品和研发一起识别和跟踪。

再进一步,从迭代规划开始,研发团队先要对根据产品节奏,对自己的版本做规划。

当然不同形态的产品,规划出的结果是大相径庭的,如果是互联网产品,那么规划往往与发布节奏有关,如果是交付给用户的产品,比如说腾讯云TCE和TSTACK,这些产品要对不同的客户有不同定制,版本规划肯定又会和客户交付有关。

在有版本规划之后,研发leader开始分活儿,那么分得任务又开始与分支规划有关,是要主干开发呢?还是要特性分支开发呢?还是要一个人一个分支开发能?那么怎么规划?

此时研发Leader有责任规范研发团队的作为,我们要改分支开发模式呢还是如何?之后提交、到合流、到缺陷反馈时候的自动化检测,最后再到发布交付都要怎麽做?

仔细想想看,每个团队在跑熟流程前,还有遇到问题解决问题的时候都要经过大量的沟通。这些沟通只能在产品团队、研发团队、质量团队和CMO(也就是配置管理员)中内部消化。

回想一下整个过程,即便没有讲细,也讲了如此之多的步骤。却还没谈怎么写代码,反而把时间在规范、交流、沟通中浪费掉了。

回顾下互联网时代早期,需求、迭代、IPM、Scrum、缺陷反馈等等这些概念,其实并不流行。例如腾讯在Pony、Tony还写代码的时代,写第一版QQ时,也未必真的了解IPM是什么。

举一反三,在一个行业发展的初期,往往是研发效率最高的时刻。例如前两年的AI围棋,团队可以只有很少的人就能实现突破性进展,可以说:越在行业初期,研发团队越简单幸福。

但是时代决定了大家不能一直这么开心的走下去,因为软件工程越来越复杂,版本越来越多,功能越来越强大,注定了研发团队不可能一直是个小规模的组织。

组织越大,个体之间的隔阂就越大,隔阂直接带来的就是沟通成本的增加。

沟通是敏捷和DevOps的共性本质

Agile也好,极限编程也好,Scrum也好,这些“敏捷”实践都是一种沟通的规范或者方法论。他们本质上解决的问题都是沟通上的问题——你不懂我,我不懂你,我要懂你,就要紧密的在一起。

可以说沟通效率的优化,是敏捷运动和DevOps运动的一个共性本质。DevOps说的什么?研发和运维紧密的在一起。

敏捷方法论中,规范的是人与人之间的沟通。DevOps则更进一步,涵盖了人与机器的沟通以及机器与机器的沟通。

那么从集团层面想要提升效率,要在各种场景下优化沟通。怎么样优化沟通呢?在这方面腾讯做到了三件事:

第一点是在组织上减少职务鸿沟

本文不讲企业管理,略过

第二点是信息化

这里笔者放了几张对比图:

上例虽然用图有些夸张,主要是为了阐明观点便于理解:如果能用TAPD写的干嘛要去写纸条,写完了还得粘,粘完了还得撕,是一件累人的事。技术文档亦然,能用文本格式化在代码库里,为什么要写doc?

敏捷从诞生开始到现在,Scrum已经有20多年的历史。如此漫长的时间段中,Scrum从理论层面上看几乎没有什么变化。

但这20多年间,世界已经前行,特别是人们的沟通方式发生了巨变。从口口相传,到有电话,到PC,到Internet,到移动网络,到智能设备,到微信等等,沟通的工具一直在升级换代。

代码库在公有云的外网虽然现在还没和企业微信集成,但腾讯内的版本很早就实现了IM通知,比如在家休假,完全靠手机就可以了解到我们团队的编码进度,分支合并的消息都直接通过企业微信push到手机上,周末也都知道谁在加班。

同样对于TAPD,如果需求有变化,可以通过手机上企业微信直接查看。

在信息化上,新的概念是办公无边界,包含办公桌上的PC,家的PC,移动终端和智能设备,使用统一的鉴权和认证方案,实现研发过程中信息的无界传达。

第三点,确定统一的沟通体验

腾讯在统一沟通体验上非常有原则,我们知道腾讯有非常多不同形态的业务,导致在研发工具链上有很多不同的工具和体系。

但是,却保障了最基本的沟通工具是统一的

研发管理部负责了两大研发平台,TAPD是腾讯的敏捷研发平台,承载了全公司的产品规划、迭代、测试计划、任务分配等等;Code是腾讯的源码管理平台,现在是工蜂,负责了全腾讯的代码库、资源文件、分支、审查、合并发布到内部开源的研发链路。

所以即便腾讯如此讲究内部赛马,但最基础沟通工具的统一还是没丢。

保持高频沟通应用的统一具有两大好处,首先,它给集团内的业务合作减少了障碍,当两个平时业务互不相关的部门相互合作时,因为系统和账号相通,只需要加入对应的权限就行了;

其次,统一沟通应用为集团内的人员流动创造了便利,一旦人员转岗,在集团内统一的沟通体验让调动人可以快速适应工作。

DevOps系统的桥接形式

接下来看看DevOps在系统之间是怎样互相桥接的。DevOps关注的两块过程改进,一个是研发的过程,一个是质量的过程。严格意义来说研发闭环是可以包含多个质量过程闭环的。那么在这两个流程的闭环中,都会涉及到若干种不同的工具。

特别在一些领域,一款工具很难满足全部的需要。比如说移动项目用jenkins,游戏也用就不太好,再比如说小型机,很难找到开源的CI工具做编译。这就导致不同的业务形态会有不同的工具。

为了让整个系统流转起来,工具和工具之间的相互调用,对于腾讯来说,最好的方式是通过松耦合。

松耦合的概念是支持但不依赖。系统和系统之间都通过通用的接口和Hooks互相调用。同时腾讯内网的研发系统,已经逐步使用OAuth代替传统token验证,来保证访问的多方安全性。

先来看内置集成的例子,也就是平台产品直接提供的功能,这里举的是TAPD中关联工蜂的代码仓库。

第一步,TAPD的项目设置页面,点关联Git项目

第二步,认证TAPD的授权到工蜂,这里是一个OAuthV2的授权框

第三步,选择你要绑定的git项目,点确定完成

当push时,在评论带上—tapdid这样一个参数,就能把对应的提交点绑定到需求上。

只需三步,需求关联你的代码库。

但是理想是丰满的,现实是骨干的。产品这样设计的功能,并不是所有的用户都买单,团队往往需要根据自己的特性来定制流程。下面用微信安卓团队例子看看开发团队怎么做。

整个团队每月大概处理 300 ~ 500 个需求,平均每个人做10个,采用特性分支的协作模型项目,每月一个迭代,3到4个Feature Team并行开发。

这个是微信的使用的分支模型,可以看到它是一个典型的特性分支发布模型。根据每个月的发布节奏设置了关键分支。

先来看他们怎么把需求和代码关联起来的,他们并不满足于单纯把需求和提交绑定,而是做了全方位的关联:

项目的默认分支就是代表当前迭代,历史发布的版本、当前版本和计划开发的未来版本,都对应每个月的保护分支和发布TAG。每个需求则对应一个或多个Feature分支。

这是微信项目在TAPD一个迭代的需求页面

这是合并请求页面,他们要求开发自己把需求单粘进合并请求单里:

如果格式不对,或者需求不存在,就自动提示你需要填写正确的需求单。

同时如果产品经理说需求这个月还不能发布,也能通过tapd的标识,来直接拦截合并请求单。

同样和代码库集成的还有自动化扫描和测试流程,流程就不仔细说了,也是通过松耦合的方式来实现自动化调用。当扫描检测失败的时候自动阻拦合并请求,从代码级别上拦截特性分支的合入。

腾讯企业级研发平台的要求

一个成熟的企业级研发系统,以代码管理为例,至少要在这4个方面能达到基本要求:

存储对腾讯来说,总容量必须无限大,单库容量必须能支撑大型图游这样级别的项目。

在管理层面,人员、权限、和项目必须做到企业可控,这一点也是硬性条件。

在网络层面,腾讯因为有多个办公地,其中还有海外的,想要访问项目足够快就要在邻近节点部署环境,来节省专线的带宽,那么系统的多地就近访问,在腾讯来说也是一个必备功能。

在安全方面更是硬性要求,不能因为一个员工今天和领导闹矛盾就删库跑路数据就找不回来了,同时,业务系统也要满足企业内各种各样的合规和审查要求,比如查一下上个月某个项目组的访问记录。

腾讯工蜂正是在这些要求下给腾讯量身定做的系统,目前已经服务了包括微信在内数不清的腾讯业务。

在系统设计上,也考虑了行业先进的思想和经验。系统直接集成了代码检视能力,支持高数量级的分支管理,支持会话式开发,在工作过程中的动向通过动态的模式展示,同时集成和定制能力是全方位的,每一个可以操作的功能基本都有它对应的API或Hooks。

在企业管理方面也做了多层加强

会后答问

问:腾讯为什么选择Git作为下一代代码管理平台?

腾讯大约在2015~2016年意识到上一代SCM的不足,在2015~2017年间,阿里、百度、微软等公司已经全面切换Git,新一代的Git系统并非单纯的Git,而是一套高度集成化,承载多项能力的效能平台。

新一代思想设计下的系统在使用过程中,潜移默化的大幅增加研发过程中的沟通效率,并能够将研发过程沉淀下来。

问:如何看待Git和传统SCM在权限组织上的差异?

Git在团队实践过程中,巧妙的培养的业务团队拆分架构和组件的行为。帮助项目架构更合理的结构化拆分,这种划分大项目为细粒度的行为反而有助于权限的分散管理。这是经过实践所得出的结论。

问:看到ppt中出现了分支权限,能否解释一下?

因为需要考虑大型项目的日常管理,很多项目组有至少几十人的团队,之后又拆分成几个小团队,在分支策略上,往往不同团队要管理不同分支。

此时,库级别的权限能力就不够用了,必须在分支上增加权限控制。这也是工蜂的一项特有功能,后续会进一步优化。

展会花絮

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps时代 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 研发的现状
  • 沟通是敏捷和DevOps的共性本质
  • DevOps系统的桥接形式
  • 腾讯企业级研发平台的要求
  • 会后答问
  • 展会花絮
相关产品与服务
CODING DevOps
CODING DevOps 一站式研发管理平台,包括代码托管、项目管理、测试管理、持续集成、制品库等多款产品和服务,涵盖软件开发从构想到交付的一切所需,使研发团队在云端高效协同,实践敏捷开发与 DevOps,提升软件交付质量与速度。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档