概述
内容来源:DevOps案例深度研究-华为软开云DevOps研究战队(本文只展示部分PPT研究成果,更多细节请关注案例分享会,及本公众号。)
本案例内容贡献者:王英伟(Topic Leader)、蔡志超、陈安毅、陈一梦、冯素娟、高金梅、黄亚楠、李娟、杨雪颖
2019年8月25日,我们完成了第二期案例研究的交付,本文整理了小伙伴们一个月努力的成果,以下请尽情享用~
一、日新月异-华为及软开云的研发历程
一直以来,华为的研发效率都让软件研发从业者敬畏,自研芯片、系统、研发5G,作为中国科技的领头企业, 华为公司在研发能力上已有30多年的积累,经历了从个人英雄主义、IPD、敏捷到现在的DevOps等多种研发模式的变迁。
1.1 华为公司介绍
华为创立于1987年,是全球领先的ICT(信息与通信)基础设施和智能终端提供商,致力于把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界。目前华为有18.8万员工,业务遍及170多个国家和地区,服务30多亿人口。
华为聚焦全联接网络、智能计算、创新终端三大领域,在产品、技术、基础研究、工程能力等方面持续投入,使能客户数字化转型,构建智能社会的基石。坚持多路径、多梯次、多场景化,构建解决方案竞争力持续领先。
1.2 商业模式
他强由他强,清风拂山岗;他横任他横,明月照大江。——《倚天屠龙记》中九阳神功的口诀
华为的产品形态和业务的商业模式是最复杂、最多的,华为是从通信起家,业务包括和运营商有关的交换机业务、通讯业务、消费者业务等,其中有TO B业务,传统业务,如银行、政府;也有TO C业务,手机业务、APP业务;有硬件,如交换机;也有软件;有交付类业务;也有TO E卖服务的,服务器业务、企业云业务等等,如华为云。
图片来自:2019华为全链接大会分享ppt
华为的业务版图:
-
运营商业务,目前世界第一;
-
企业解决方案,思科第一,华为第二;
-
消费者终端业务,世界第三;
业务形态决定采用的研发模式,在华为,消费者业务采用IPD的模式;运营商和企业业务采用敏捷方式;华为云服务DevCloud采用DevOps,多种研发模式并存。
1.3 财务数据
2019年,《财富》(Fortune)杂志发布了最新的世界500强企业排行榜。华为排名提升11位至61名,阿里巴巴与腾讯分列第182位与第237位。
2018年,华为收入7212亿元,阿里收入3768亿元,腾讯收入3126亿元。从营业收入的角度,华为>阿里+腾讯。
财富中文网指出,硬件制造企业的利润率往往远不如平台型互联网公司,华为利润率不及腾讯一半。就利润率而言,华为利润率为8%,阿里巴巴利润率为23%,腾讯利润率则为25%。
公开信息显示,2018年全球研发投入超过千亿元的四家企业分别为:三星(1060亿元)、华为(1015亿元)、谷歌(1055亿元)和大众(1035亿元)。
华为发布的2019年半年报显示,营收为4013亿元,同比增长23.2%。
1.4 组织文化
-
愿景:丰富人们的沟通和生活。
-
核心价值观:成就客户,开放进取,自我批判,团队合作,志诚守信、艰苦奋斗。
-
文化标签:狼性文化,奋斗者精神,床垫文化,商业管理上“反熵增”“耗散结构”。
二、精益求精-软开云前沿研发理念
作为中国科技的领头企业,华为公司在研发能力上已有30多年的积累,经历了从个人英雄主义、IPD、敏捷到现在的DevOps等多种研发模式的变迁,积累了丰富的研发能力。
当前处于人工智能、大数据、云计算、互联网、社交化和移动互联网蓬勃发展的时代,在此背景下,传统研发方式面临着巨大的挑战。
在业界,大家都知道 软件工程经历了三代 ,本质上,技术的更新换代决定了软件工程方法的演进,(大型主机-PC-互联网-移动互联网)。
-
第一代(20世纪60年代)是软件作坊时代,那时候没有规范的流程,瀑布软件;
-
第二代(20世纪80、90年代)进入了过程控制时代(全面质量管理、精益制造、CMMI等);
-
到2001年进入了敏捷、精益和DevOps持续交付,持续部署的时代。
这三个时代每个时代历时20年。
华为的研发历程同样也可以分为三代:
-
1998年之前,华为实际上是小作坊模式,华为自己称为“游击队”,好像创业公司一样,单兵作战,没有什么规范流程来研制软件,就是靠人肉来铺;
-
1999年,华为认识到和业界相比,华为的人均产出低,任正非意识到必须要从国外引入先进的流程,因此花了上亿元从IBM引入了IPD流程,于是从1999年开始华为进入了重型控制时期(IPD+CMMI),研发进入“正规军时代”。
-
2007年华为开始引入敏捷,成为中国实施敏捷的最大企业,华为的产品线基本都有了成熟的敏捷和DevOps实践,第三个时代称为“特种兵时代”。
2.1 精益敏捷
华为在敏捷方面的应用有:Scrum、看板, 在其内部产品线还有产品级敏捷,也就是规模化敏捷。
华为敏捷是真正的端到端敏捷: 即从用户提出需求到功能上线、用户直接应用其功能为止,包括了需求、开发、测试、运维、运营、市场整个流程。
这其中包括
-
1个铁三角:最小可工作产品MVP、全功能团队、迭代开发。
-
2个端到端交付环:DevOps持续交付流水线、价值流可视化和双向追溯。
-
17个实践:运营分析、持续反馈、精益画布&SWOT、用户画像、KANO模型、重构、架构解耦、站立会议、用户故事、看板、持续集成、持续部署、 自动测试、灰度发布、DogFooding、A/B测试、监控运维。
华为软开云以SCRUM框架为基础,但不是标准的SCRUM,每个迭代都是端到端的流程。
每周的迭代中,由于工作人员处在不同的工作地区,站会在相同的时间召开,进行迭代的检视、调整。回顾会是在两个冲刺或者有必要时举行。
华为云的Scrum框架中没有SM这个角色,由SL或PD去承担此部分职责。
2.2 精益DevOps
接下来展开介绍华为的DevOps实践都有哪些?
-
从管理流程上来看,使用的是精益看板管理流程;
-
从组织结构上来看,使用的是2-pizza全功能团队;
-
从架构和技术上来看,开展的是微服务和持续交付DevOps技术实践;
-
在工具支撑上,应用的是华为软开云DevOps工具平台,为全球软件开发工程师提供DevOps工具支撑。
2.2.1 精益看板
管理流程上华为应用的是精益看板。
华为的每个服务团队都是全功能团队,都建立了自己的看板,包括设计、开发、测试、上线,所有流程,服务之间偶尔会有依赖时,只需要点对点沟通就可以了。
这个Kanban上显示的是全流程的价值流。价值流是给客户提供价值的,需求从提出到发布给客户的整个过程。可视化之后就可以看出价值流中出现的问题,比如等待、阻塞、浪费。从而能让团队及时发现问题、及时调整、加速价值流动。
价值流是Kanban的一个重要实践。
2.2.2 全功能团队
在组织结构上实行的是2-Pizza的全功能团队。
对于全功能团队的定义是能够对特性、部件或者架构完整的实施规划、需求、设计、开发、测试并独立交付、运维的项目型团队。
三、匠心独具-软开云精益研发实践
3.1 如何践行DevOps
著名的管理学大师彼得·德鲁克曾经说过: 没有文化的组织将无法持续前行。
自动化作为DevOps的基因;大大增强了研发的效率,而精益思想解决和避免了很多流程及开发过程中的低效和浪费;测量帮助我们实现了快速反馈,正确决策;最后分享作为DevOps的核心,让用户了解组织,也让组织了解用户。以上五大内容是构成了践行DevOps的基础。
3.2 DevOps三步法
整个DevOps实施可以分解为三步: 第一步是从左到右快速流动;第二步是从右到左快速反馈;第三步是在整个过程中持续学习。
其中 让价值快速流动有六个实践, 分别是:可视化、限制在制品、减少规模、减少交接数量、持续识别和拓展约束,以及在价值流中消除浪费。
反馈原则包括四个实践: 第一、出现问题时及时发现;第二、密集解决问题、构建新的知识;第三、将质量向源头推进;第四、为下游工作进行优化。
最后是 持续学习和实验原则 ,主要围绕的是开启组织学习和安全文化, 让日常工作的改进做到制度化,将局部发现转为组织全局改进,在日常工作中注入恢复模式。
3.3 华为云DevOps实施框架
DevCloud框架分别从管理流程、组织机构、工程实践、环境&工具四个维度为用户提供了对应的解决方案。 基本涵盖了前期商业分析、需求规划、计划跟踪、持续交付等多个环节。
DevCloud项目管理是基于项目的管理,提供精简流程和scrum流程两种管理服务, 其中Scrum流程是为敏捷开发量身定制的,包括项目规划、敏捷迭代、需求管理、缺陷跟踪、文档管理、看板、报表统计分析等功能。组织结构中重点强调全功能团队协作发展。
3.3.1 分层需求管理
分层的需求管理,重点体现了需求分层原则、需求分层责任划分、以及story拆分INVEST原则。
漏斗形需求通道主要是消除了浪费和潜在风险,通过逐层把关和分解确认最终需求交付迭代计划。
3.3.2 分支管理策略
-
Master分支上存放的应该是随时可供在生产环境中部署的代码(Production Ready state)。
-
Develop分支是保存当前最新开发成果的分支。
-
Release分支是为发布新的产品版本而设计的。
-
Feature分支(有时也可以被叫做“topic分支”)通常是在开发一项新的软件功能的时候使用,这个分支上的代码变更最终合并回Develop分支或者干脆被抛弃掉(例如实验性且效果不好的代码变更)。
-
Hotfix分支与Release分支十分相似:都可以产生一个新的可供在生产环境部署的软件版本。
3.3.3 编译构建
DevOps采用一站式持续集成,本身支持github及其他的git仓库,没有限制必须是devcloud代码托管服务,同时在编译构建服务下支撑不同技术栈的编译打包,比如说maven、npm、安卓之类的编译,无缝对接。同时集成了华为云的其他服务,比如弹性主机、容器化服务、容器镜像仓库swr。
3.3.4 静态检查
开发人员写代码比较随性,没有统一标准,需要制定一些基本的标准,并对代码进行持续的静态代码扫描,一旦发现问题立即在迭代内修复,这样才能保证上线的应用相对可靠,及时发现代码缺陷、持续看护代码质量、防止代码腐化。
华为的DevOps Cloud代码检查工具覆盖了Top10的主流编程语言,分别从7个维度全面评价代码质量: 编码安全、编码缺陷、编码风格、架构、依赖包安全、圈复杂度、代码重复率,通过专业的预置规则达到缺陷精准定位到行,从而保证和完善代码质量。
3.3.5 代码检查
有人说有Code Review比没有Code Review好,又有人说没有Code Review比有Code Review好。很绕的一句话。仔细分析,代码评审本身会造成延迟,以及工作切换,但有一定的效果,通过协作的方式来保障质量,比如结对编程,Code Review的作用就不会那么明显。
总之 代码评审不是目的,真正的价值还是代码质量的保证。 在推动Code Review方案中,必须明白自下而上的推广时要打好基础,自上而下的推广时需要高层支持,数据的分析是为了知道目前进展的情况。
3.3.6 测试实践
这页主要是测试的一个实践,比如说测试管理、自动化测试,需求串讲其实开发和测试就需要达成一致理解。开发在代码开发时,测试就会输出相关测试用例,测试在测试的角度提出一些相关问题。
整个微服务团队差不多5到10人,自身会做开发自测,测试会做专项测试,各自的分工如右下角所列,针对不同需求构建不同环境,例如alpha测试接口测试、beta环境接口测试、web自动化测试、安全测试、gamma环境接口测试、生产环境在线测试、性能测试、可靠性测试等。
3.3.7 自动化测试能力建设
按需循序渐进建立高效测试管理和自动化测试能力。
首先是按需投入:
-
一般开发少于5人情况下,无需专职测试;
-
5到10人需要预备1人专职测试,需要重点关注开发和测试的沟通接口,建议测试人员尽早接入,研发过程中,总结重复测试重复工作,鼓励测试人员主动建立自动化测试;
-
在10到15人以上开发团队中,最好建立对应的测试团队,选出测试组长,科学管理测试需求和测试覆盖率及进度,以测试报告形式反馈,引入工具代替手工报告,量化工作量,引入流水线,使用门禁控制发布出口。
总之,不同的团队,在自动化能力建设上要求不一样,对用的沟通协作手段,集体质量意识至关重要。
3.3.8 持续交付
把DevOps端到端完整交付的生命周期打开来看,从需求分析到原型设计到架构到开发,一直到部署上线运维,最后到运营。
不是说产品上线就结束,而是需要运营的活动去做一个闭环,一般情况下在每个环节都需要搜集一些反馈,然后通过运营的手段去产生一个产品或者价值的闭环,比如怎么样去拉新,怎么样去促活,所以整个过程,每个阶段都需要很多的实践,从而达到持续交付的理念。
右边这张图,基于一套自动化脚本构建端到端验证交付。从开发到构建再到虚拟环境的验证,然后到用户环境的验证,最后发布,分为四步,每一步都可以循环执行,每一步都是基于上一步的成功自动触发下一步的开展。整个循环的原则就是越快出错的地方越需要提前执行。
3.3.9 每日持续交付流水线
最后 通过DevCloud实践介绍每日持续交付流水线。
首先每天晚上由流水线触发。流水线里主要需要配置质量的门禁,或者质量的考核点,比如分支策略、静态扫描,静态扫描也分不同的语言,不同的规则集,然后是代码覆盖率,当前也没有要求所有代码百分之百覆盖,一般会根据业务层面去划分优先级,最高优先级必须百分之百,但次优先级还是可以适当方宽。
还包括一些开源的扫描,用到大量的开源的组件,就需要保证没有漏洞,没有安全后门,没有违反开源协议的代码。
另外,在集成测试、性能测试,通过功能开关、一级灰度、二级灰度做相关测试。
四、尽享丝滑-软开云端到端工具支撑
DevOps落地并不仅仅只是一个工具链,它首先展现的是一个文化,要求多角色无缝配合,在研发流程的基础上,衍生出持续集成、支持交付、自动监控、度量分析、分享等内容。
-
自动化其实是要提高效率,能自动化的全部自动化起来,不能自动化的也要想办法自动化起来。怎样想办法呢?其实就是要使用大量的技术手段,包括云计算、大数据、移动、社交、人工智能等,通过这些计划来解决我们之前解决不了的问题。
-
精益体现在两个方面,在产品方面采用精益画布来准确把握产品方向,在研发环节通过精益研发来消除浪费、持续交付。
-
度量及反馈环节会设定一些业务指标,然后去监控这些业务指标,并对获取到的监控数据进行分析,最终得出具体的改进措施,并将这些改进措施落实到下一步的开发计划里去,形成一个优化的闭环。
-
分享就是在开发、测试、部署、运维、运营等团队之间经常去做一些分享,把各方面好的经验及实践分享出来,让大家一起成长。
4.1 DevOps平台全貌
团队从需求、设计、开发、构建、测试、部署、运维、反馈再回到需求,形成完整闭环, 其中构建、测试、部署、运维四个环节构成持续交付流水线,持续交付的流水线由各类自动化工具实现。
-
构建环节包括代码检查、单元测试、构建打包、安全扫描等工具集;
-
测试环节有接口测试、安全测试、浏览器兼容性测试等自动检测工具;
-
部署环节实现自动部署、冒烟测试等工作;
-
运维环节实现全面监控在线测试等。
4.2 持续交付流水线
1) DevCloud支持精益项目管理、及时准确掌控项目质量与进度,包含:敏捷迭代开发、社交化协作、规范化模板、多维度看板、项目统计报表、项目文档管理、项目wiki;
2) 支持代码托管;
3) 配置管理基于Git的高可用代码托管,实现跨地域协同开发,面向软件开发者的轻量、快速、智能的CloudIDE云端开发环境;
4) 可定制可视化交付流水线,混合语言并行构建;
5) 测试用例为核心,提供端到端测试管理能力,移动测试支撑多级型、兼容性测试能力。可设置质量门禁自动检查流水线产出物的DoD达标情况。
6) 自动化部署,一键式的应用包部署,支持典型应用快速部署,支持Tomcat、Java、NodeJS、PHP、Pathon、Ruby、Go等,支持自动化并行部署;与流水线集成,实现从代码提交、代码检查、编译构建、部署、测试到发布的流水线。
五、物竞天择-软开云残酷的竞品分析
图片来源:JFrog总结出来的企业级DevOps知识体系图谱
一个企业如果想要做转型(无论是敏捷转型还是数字化转型),适应现在快速发展的社会节奏,都要涉及到两个层面,覆盖整个软件开发生命周期。其中涉及到研发过程改进优化,人员角色、工作职能重新定义调整,流程规范积累沉淀,工具串联自动化集成等方面。
依据:《研发运营一体化能力成熟度模型》整理
这是全球首个DevOps标准,即《研发运营一体化能力成熟度模型》,由信通院牵头,云计算开源产业联盟、高效运维社区和DevOps时代社区联合国内外其他各大公司共同编制。目前这个标准已经在联合国直属标准化组织ITU、中国信通院标准化协会正式成立。
模型包括总体架构、敏捷开发管理、持续交付、技术运营、应用设计、安全风险管理、组织结构等7个部分,将应用的需求、开发、测试、部署和运营统一起来,基于整个组织的协作和应用架构的优化,首先敏捷开发、持续交付和技术运营无缝集成。
作为DevOps工具厂商的落地实现,应该包括那些模块呢?让我们快速浏览一下各大公有云厂商的产品功能架构。
5.1 云效
云效的软件研发模式是“一站式”,项目需求是一个项目的起点,在代码管理、代码编写、单测集成、构建部署、系统测试、集成测试直至最后的提交发布,对于每一个环节平台都有相应的能力提升各个角色的质量和效率。
-
代码管理环节按应用的管理代码及平台化构建管理;
-
代码编写环节应用平台化拉取应用代码;
-
单测集成阶段可以准确识别代码高危漏洞;
-
构建阶段可以一键构建开发测试包以及一键申请/部署测试环境;
-
系统测试阶段可以测试管理系统以及低成本编写/维护自动化脚本;
-
集成测试阶段可以自动构建集成包、自动部署测试环境以及集成自动化测试自动回归;
-
在最后的提交发布阶段是合并主干代码。
5.2 腾讯TAPD
TAPD(Tencent Agile Product Development)是源自于腾讯的敏捷研发协作平台,提供贯穿敏捷研发生命周期的一站式服务。覆盖从产品概念形成、产品规划、需求分析、项目规划和跟踪、质量测试到构建发布、用户反馈跟踪的产品研发全生命周期。
它是由腾讯官方推出的一站式敏捷协作平台,沉淀了腾讯内部十余年的敏捷研发理念与实践。针对敏捷研发实践中的团队沟通、跨地域协作、流程管理等方面的诸多痛点,TAPD提供了专业化、一体化、灵活化的解决方案,能够帮助团队透明研发过程,高效率研发协作,高质量交付产品,以及度量研发效能、实现持续改进。
5.3 腾讯Coding
Coding是腾讯云旗下的面向软件研发团队的研发协作管理平台,提供了从需求、开发、测试、发布、总结的端到端的协同服务和研发工具支撑,涵盖了软件开发从构想到交付的以一切所需,提供完整的研发协作工具,无需对接第三方服务。研发团队在云端高效协同,时间敏捷开发与DevOps,提升软件交付质量与速度,降低企业研发成本,实现研发效能提升。
CODING 在前两天的 Kubecon 2019 大会上发布了 CODING 2.0,CODING 2.0 进行了产品、产品理念、功能、首页的升级,开始覆盖从代码托管到 DevOps 的流程。
CODING 2.0 上线了持续集成及制品库的功能,标志着 CODING 正式进入持续集成阶段。用户推送代码或合并请求,即可出发持续集成进行构建、单元测试、安全扫描等工作,并生成制品存储在制品库。
除工具外,CODING 还为企业提供研发流程实施的指导培训、敏捷训练等额外服务。CODING 开始将自己的能力从代码管理延伸到DevOps,虽然起步没多久,后面功能有什么惊喜,值得期待。
5.4 腾讯蓝鲸
腾讯云为游戏行业提供一系列解决方案,涵盖开发、运维、运营等领域和场景。针对不同类型的游戏提供灵活而稳定的部署方案,轻松应对玩家激增、高并发、海量访问等带来的问题;为游戏的各种应用场景提供游戏生态服务解决方案,如游戏场景的开发组件、游戏安全、游戏加速、全球互联互通等,让客户的游戏更稳定、更安全、更好玩。
蓝鲸为运维人员提供一站式运维(技术运营)技术解决方案,它基于 PaaS 的理念,将服务以 API 的原子能力进行集成,并提供了自主研发工具/系统的便捷开发者服务,通过私有化部署的软件交付模式,快速帮助用户落地一整套自动化运维/运营体系产品,提升企业基础运维能力,创造运维增值服务。
5.5 百度效率云
百度效率云是领先的云上研发工具链。包含产品规划、项目管理、Git代码托管、代码检测、制品管理、持续集成与持续交付等工具,让复杂的研发协作更简单。
它包含四个子模块,分别是:代码管理工具 iCode,持续交付工具 iPipe,项目管理工具 iCafe,制品管理irepo。
5.6 总结
企业需要的其实就是一个轻量化、服务化、云化社交化、智能化的DevOps服务或者平台. 轻量化就是简单易用,服务化就是做成一个服务,然后按需获取,随时随地就可以使用。而且不管是pc也好,web端也好,智能设备也好都可以访问。
-
云化其实就是让服务运行在云端,利用云的弹性伸缩和大规模并发能力来加速我们的研发活动,提高效率。
-
社交化就是工具服务要和我们的社交工具进行对接来解决研发协同的问题。
-
然后及时智能化,提供一些智能化的辅助决策、分享的预测,还有一些预警等。
那么基本上满足这个需求的产品是什么呢?答案见下方。
最后
以上就是大气飞机为你收集整理的DevOps案例研究|中华有为-解构华为软开云DevOps实践的全部内容,希望文章能够帮你解决DevOps案例研究|中华有为-解构华为软开云DevOps实践所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复