@gaoxiaoyunwei2017
2018-08-23T10:01:29.000000Z
字数 9002
阅读 757
黄晓轩
讲师 | 孙辰星
编辑 | 黄晓轩
孙辰星
毕业于浙大数学系,现任腾讯CODE平台产品负责人,曾就职于北京联众、7K7K等公司,具备10多年技术、产品、研发管理、团队管理经验,加入腾讯后负责腾讯代码管理平台的产品工作,主导了腾讯Git等项目,致力于腾讯代码管理系统与DevOps链条的结合。
DevOps是很全的概念,他牵扯了从研发过程中最早的产品需求,产品从测试到开发,再到最后运维,甚至说客服,所以他把整个产品的过程都串了起来。其实每一步,每个不同的角色,他的视角是不一样的。对于腾讯来说,我们也是。我们有很多很多不同的部门,这和很多企业内部的结构是一样的。
我今天分享的主题是腾讯DevOps全链路方案的分享。我负责是研发管理和需求敏捷,这也是我本次分享的重点。
我来自于腾讯的研发管理部,研发管理部是腾讯一个很老的部门,负责整个腾讯的工线,就是研发的管理、效率加强。腾讯的研发管理部归到腾讯的TEG,这个BG也对腾讯整个公司的研发提供支持和文化上的帮助。
腾讯有非常多的产品,这张图中的图标肯定还没列全。如果让小马哥自己去数腾讯有多少产品,他肯定自己数不清楚,如果让高管去数,估计一两周也不一定能数清楚。腾讯有特别多的业务,所以我从研发管理部角度特别佩服腾讯的工程师和产品团队,做了这么多东西。
在这些海量的业务中,这张图中最多产品的BG就是SNG。全腾讯的代码库都由研发管理部管理,但是这么长的产品线背后,腾讯有多少员工呢。腾讯的技术人员有15000人,当然这个技术人员里面不仅仅是开发,还包括测试、运维,所以真正写代码的要少于这个数。产品人员有6000人左右,这里不仅仅是产品经理,还包括运营、游戏策划、项目经理,产品经理大约2000人的规模。腾讯用这样的人数去支撑腾讯集团产品线,其实在BAT来讲效率是非常高的。实际上目前在BAT中,腾讯还是处于一个低位的,从总人数来讲是一个低位的水平,尤其到大公司这个级别来说,腾讯真的是一个很低位的水平。这么少的人做了这么多的东西,从这个统计角度来说,还真的是可以能够解读到腾讯自己内部产品的研发效率是非常高的。
研发效率高,我们所认为的原因有四点:
先来看敏捷,在研发过程当中主要有两种角色:产品经理和研发团队。
这张图是Scrum基本的一些元素,我把他简单列了4个元素。他是一个Scrum的模式,从需求到形成迭代,迭代好之后团队leader进行任务的分配,然后开发的过程当中或者开发结束之后,来做缺陷反馈,这是一个scrum的基本模式,我并没有列的很细。
我们把研发过程再展开,把配置管理的工作也加进去,你会发现一下子又多了很多节点,一下子这张图从敏捷的方法变得更复杂了。这张图 我已经做的非常非常抽象。但是我们回想起来一个事情,真真正正互联网开始的原点是什么样子的。互联网开始的时候可不是这个样子的。
大家想一个问题,小马哥1998年和托尼几个人开发最初版QQ的时候,他关心这些事实吗?他知道什么叫迭代吗?所以,其实回想起来研发项目效率在最高的时候真的是原点那个时代,就是第一代程序员。第一代程序员是什么样子?就是一个人做了很多事情。小马哥腾讯五虎将写了第一版QQ。放在今天来看,今天的软件工程就没有当时那么简单。为什么会出现这么多理论,敏捷的方法论、配置管理的方法论、软件工程的方法论等等。是因为互联网软件的规模、难度、模块,还有功能都是越来越复杂、越来越强大的。现在人越来越多,引出的最直接的问题是什么问题?最开始一个人的时候没有问题,两个人的时候开始逐渐有问题,10个人、100个人、1万个人的时候就变成了关键性问题,就是沟通的问题。
我们回想一下敏捷的方法论:Agile、XP、Scrum,他所做的是对你的团队做了一个沟通上的行为规范。他给你制定一个行为规范,你一开始要跨需求,要做需求沟通会,要划分迭代,每日要开站会,要用看板的模式在团队之间进行密切的沟通。讲了什么东西?讲了沟通。
实际上从Scrum来说,Scrum到现在有20多年历史了,真的非常非常久。Scrum的理论到现在来说一直维持20多年前差不多的理论,他没有太大的变化。很多的敏捷教练和敏捷专家,在这个理论上耕耘了几十年。当然可能在一些周边的领域衍化出一些新的度量方案,或者新的实施方案,但是他的本质上还是一样的。本质上就是给我的团队去拟定和规范一个沟通的流程,一个沟通的方法。
对我来说,我是腾讯客户平台的产品经理,产品经理有一个职责是要找到这个事情的本质。我今天在这里跟大家做这个分析,把这个事情的本质跟大家提出来,敏捷是和沟通有关的。实际上DevOps也是和沟通有关的,我们知道DOIS主会场,主办方颁布了一个叫“研发运营一体化标准”。研发运营一体化,研发和运维开心的在一起。他实际上还是在解决研发和运维当中沟通所带来的效率损耗。通过自动化,通过方法论来实现这个沟通效率的加强。当然DevOps的沟通效率和敏捷的沟通效率还有一点点不一样。敏捷所强调的沟通都是人和人的沟通,产品经理和研发团队的沟通,研发团队和研发团队内部的沟通,研发团队和测试人员的沟通。但是DevOps不仅仅是人和人之间的沟通,他还涵盖了人和机器,机器和机器之间的沟通。
从沟通效率的角度上来说,我是从腾讯的工线角度负责整个集团代码的管理。实际上我也是从产品经理角度,我要解决整个集团效率的问题,我首当其冲首先想到的是解决整个集团沟通效率问题。研发管理部有两大产品,我觉得腾讯在沟通的效率上走了三步,我觉得是非常重要的,就是三点其实腾讯目前来说已经做的非常好。
腾讯内部研发的工具非常的广泛,是一个去中心化的结构。这个结构可以说每一个事业群,每一个部门,很多的部门都会有自己一套的开发工具链和运维工具链。但是你会发现腾讯做了这么多东西,他还是保持了一定程度的集中性,什么是集中的呢?就是需求管理系统和代码管理系统,是总办要求一定是要集中的,强制你所有的团队必须要使用这两个系统。为什么?因为从整个集团企业的角度来说,使用同一份统一体验的、基础的沟通工具,对你的整个集团来说,你的效率是完全可见的,你可以感受得到的。
我举一个例子大家就明白了,比如我一个同事从我的部门转岗到微信去,他使用的代码系统是一样的,他使用的需求管理系统是一样的,是一致的,不需要任何的成本代价的切换。
再举个例子,如果我的一个团队,要和微信的团队进行合作、协作,我怎么样去做?如果我和微信用两套需求管理系统和代码管理系统的话,意味着我们之间互相要学习。但是现在不用,我的代码管理系统和微信使用的代码管理系统是一致的,是完全一样的,都是腾讯同一份,需求管理系统也是同一份。
这是腾讯研发管理部从研发管理角度来说对整个腾讯提供了统一的沟通体验的两个平台。一个是腾讯的TAPD,TAPD负责的是产品规划、迭代计划、测试管理等等,这样一个敏捷的管理系统。工蜂Git是我们研发管理部研发新一代的代码管理平台,一定会替换目前所用的SVN,然后统一腾讯内部源代码的沟通体验。整个腾讯的源代码都在我这个部门负责,我现在所做的事情是在把这个腾讯内部的一些老的平台逐渐的替换掉,推动我们的业务团队更新他自己的研发管理使用的经验,换到我们新的工蜂Git平台。软件代码、资源文件、分支管理、审查、质量管控研发管理平台是腾讯统一体验的。
腾讯有那么多和DevOps有关的系统,如何在腾讯内部进行集成呢?这块我们讲一个概念是松耦合。我们知道在研发过程当中,他有很多的步骤,每个步骤都可能形成非常专业和有他自己特色的平台。我们也很清楚,任何一个平台比如Jenkins,这是一个开源平台,基于这个开源平台新开发或二次开发,他也很难去满足所有团队的需要。这么多种多样的研发工具,怎么样做集成?集成的方式我们提供的思想和方案就是松耦合。松耦合就是我支持你,但是我不依赖你,我可以独立你而存在。
我们和TAPD内部集成松耦合的方式。这是TAPD的一个界面,TAPD的项目设置当中有一个关联git项目按纽,他实现的是一个从需求关联代码库、关联代码分支提交的这么一个功能。
他只需要进行三步的操作,在这里面点关联Git项目,然后通过Authorize认证,第三步选择他要关联的项目。这样三步点确定,这个代码仓库就和这个需求池绑定在一起了。在提交的时候,只要带着bug_id的串号,需求和代码就直接绑定上。这个功能其实设计的很简明,体验也很好,但是这个理想很丰满,现实很骨感。现实很骨感的原因就是其他的研发团队更喜欢自己定制的方案。
微信这个项目很具有典型性,因为他没有太多的研发人员,没有上千的研发人员。他只是一个几百人的团队,所以很多的其他公司,比如说传统行业的公司,你的一个核心产品大约也就是这么一个团队的规模。所以微信实际上在迭代的过程当中,研发管理过程当中他的经验是可以深层次借鉴的。他每月一个版本,我们平时使用微信客户端的时候每月一个版本,大约是300-500左右的需求。(微信安卓客户端)核心研发团队大约40人左右,有3个Feature Team,平均每个人要做10个需求每个月。
他使用了TAPD管理他的需求,他整个产品经理团队都是用TAPD提需求。他使用的就是腾讯的工蜂Git管理他的代码、分支和分支发布。
咱们快速看一下。这是他的分支管理,我们可以从这张图上很清晰的看出,微信他的管理模式是采用了一个是功能分支的协作模式。
他的团队所要做的事情是把他的需求和代码库要关联在一起,有三点:
这是微信在TAPD项目的一个截图,他的迭代从需求管理系统上的命名和代码管理系统上他默认分支的命名是完全一致的。这也是他后面为什么可以做自动化。
这是我们工蜂系统合并请求单的一个截图,可以看到他贴的是一个TAPD单,他贴TAPD单目的是要绑定他的需求。
在这一点上,他们实现了自动化。如果这个TAPD单没有贴,或者贴的不对,他会自动的提示:您的提交因为缺少了TAPD的单号所以阻止被合并。一旦他的需求没有关联起来的话,我从代码分支上不允许他合并。直接规范他自己的研发人员一定要和这个需求进行绑定。
这也是另外一个他们自己实现的Feature。他的产品人员,会在TAPD上面做一个标志,标志这个需求在这个月能不能被合入到这个分支上。他实际上也是一个自动化的检测,他通过调用TAPD的接口和Code平台的接口,来实现自动化。这张图都是我们工蜂系统的动态墙,这个动态墙是按照时间顺序来的。过几个月回溯时,他可以清晰的知道我什么时候解决了这个问题,什么时候重新绑定了这个需求。
他们也实现了代码和质量测试的一个集成的自动化。这是另外一个项目的流程,实际上微信使用的流程也是差不多的。右边是一个Jenkins Plugin的一个方式,微信他的客户端是用Jenkins做日常检测。左边是我们工蜂系统,他通过调用工蜂的接口,还有自己去进行CI,自己去进行UI的检测和代码风格的检测,来实现整条自动化的链路。
实现的效果就是像这个图这样子,直接在他的代码管理系统,就是我们工蜂平台上。当这个开发人员提交了代码到这个代码库上,然后想要往这个月的发布分支合并的时候,他一旦提交合并,所有的自动化检测、编译检测、UI测试,这一系列自动化的操作,在合并提出的瞬间就完成了,来给他的分支决策人一个在我们代码管理系统上的反馈意见。下面是一个通过的,上面是一个拒绝的。
咱们举完微信的例子,再来谈谈腾讯对于内部系统的要求。在代码管理这一块,对于企业级研发平台来说,我觉得我们的要求会比在座的各位要求会更多。从存储上来看,我们如果要去用一套代码管理工具,我们一定是要求他无限大的。腾讯有一个特点,他有很多的大项目,我们知道游戏资源非常大,我们的代码管理工具一定要支持大流量和大容量的项目,这两点上是没有商量的。
人员的管控从管理上来说,也一定会要求我的系统是一定要和公司人员管理有关联,而且要做到人员可控,如果他转岗,如果他离职,人员的权限和项目的权限还有人员的帐号都必须做到可控,这个也是没商量的。
腾讯有多个办公地,在北京、上海、成都、深圳、广州很多地方,最早做SVN的时候,很多团队要求他的版本库就在他的本地。因为网络光纤费用还蛮贵的,而且还有电信和联通线路的问题。所以从我们角度来说,以前做SVN系统的时候就实现了多地部署。现在放在我们工蜂系统上来说,也是一定要实现多地部署的。就是你成都的团队访问成都的版本库,但是你不管是北京的人还是成都的人,还是深圳的人,从这个网站上,从这个管理系统上看到的是统一的一个界面,完全统一的一个界面。这一点上,我们也是实现了一个就近访问的能力。
在安全上对于腾讯来讲也是没有商量的。你企业内部的一些敏感操作的日常记录,你一些异常操作的恢复。我举一个例子,现在外面的开源软件,比如说他的开发人员可以删项目,他删完以后这个项目就没了。这种情况在腾讯是绝对不能发生的,我们不允许这种事情发生,在这个基础上我们一定要做很多的定制。
在这些要求下面,工蜂系统就诞生在这些苛刻的环境条件下面。
同时,还支持了比较新的研发的一些思想,我把这些新的思想归结为5部分:
腾讯是一个非常大的企业,从自身的动机来讲,从集团角度来说,满足每个人挑剔的需要。他们有的人会挑安全的问题,老板有时候会挑你稳定性的问题,从这方面我们做了很多的优化和定制。
我们是腾讯的研发管理部,我们会和腾讯云的同事一起来给大家提供企业级别DevOps解决方案,非常欢迎大家来参与我们的讨论。我今天的分享就到这里,感谢大家。