作者简介 董越,独立咨询师、《软件交付通识》作者,DevOps 资深专家,前阿里巴巴研发效能事业部架构师,Certified DevOps Enterprise Coach
本文为董越老师在 GOPS 全球运维大会 2021 · 上海站的演讲整理而成,关注 DevOps 时代公众号,精彩不容错过。
伟大领袖毛主席教导我们:“没有调查就没有发言权。”其实做 DevOps 也是一样,如果不了解具体企业、具体团队、具体项目的 DevOps 情况,就开始指指点点搞规划,那是没有什么好效果的,因为没有抓住它的痛点。
不论你是工具团队负责人,还是过程改进团队负责人,或者是 DevOps 教练,不论你想从工具角度做改进,或者从流程角度做改进,当你帮助一个团队做改进时,你总得先摸清楚当前 DevOps 的落地情况是怎样的。
所以我们就来看一下摸底工作到底怎么做?这个摸底的方法也是我们这些咨询师,这几年在为几十个项目做DevOps咨询的时候逐步探索出来的。
在开始之前,我们还是先说明一下我们这里说的 DevOps 是指啥。近几年 DevOps 是一个很火的词汇,搞得好像什么都是 DevOps 了,而今天重点讨论的是 Dev 之后,Ops 之前的部分,就是从你写完一行代码到把它发布上线这期间要考虑的部分。
那这部分里面发生了什么事情呢?
第一,生成转换。我们会看到程序的形态从源代码形态通过构建生成了安装包形态,再进一步被部署到线上运行起来,变成运行中的程序。程序的形态发生转换,从源代码最终生成转换为运行中的程序。
第二,配套支持。程序要想运行起来,需要相应的运行环境(测试环境、生产环境)支持,数据库表结构变更需要管理,不同环境有不同的配置,所有这些都是需要提供支持的。因为要想程序运行起来,需要一系列配套的东西在一起。
第三,累积汇聚。发布上线的时候,其实并不是只上线一行源代码改动,而是上线了一系列改动,这些改动是在软件交付过程中不断汇聚、累积起来的。如果你一个人写源代码就是不断累积,但一次发布的东西可能不止是一个人的改动,不同人写不同的用户故事,这实际是大家工作汇聚的过程。
第四,质量提升。最重要的是,这个过程当中会不断提升软件质量,直到达到可以发布的程度。这包括了静态测试和动态测试。
从这个过程来看,DevOps 包括了这四类活动,来实现从改动一行源代码到最后发布上线的事情。我们今天说的DevOps,就是这期间发生的事情。我们也可以把这个过程称作软件交付过程。
下面我们看一下我们这里讲的 DevOps 或者说软件交付,在软件开发全过程中的位置。
软件开发包括了哪些内容?总体上,大致划分为定义侧、实现侧,一起构成了软件开发。定义侧就是关于确定该研发什么,该把这个产品做成什么样子,产品的定义和业务定义是什么样的。产品经理,CEO 等都在这一侧,他们要定义产品是什么东西。
而咱们在座所有人都是在实现侧,把定义的东西实现出来。实现侧大体上包括了设计编码、交付、运维三个部分。设计编码是 Dev、运维是 Ops,这两者中间是交付过程,也就是我们这里说的 DevOps,某种意义上,它可以说是既属于 Dev,又属于 Ops,是两者的交集。
好,我们搞清楚了概念,下面就开始介绍如何做调研。
做调研,总得先了解一下总体情况吧。先看一下业务和系统的主要特征。
然后我们要大致了解一下管理实践。
首先一个问题是,这个产品管需求条目叫什么?就叫需求,还是用户故事,还是特性,甚至可能是项目。我们要用跟用户一样的语言,所以先要了解用户怎么说。另外需求是分层级的,我们关键是要抓住哪个层级呢?抓住可以独立测试、独立发布的需求,这个层级。因为将来它很可能会映射成一条 Feature 分支。将来统计测试的内容、发布的内容的时候,也说的是有哪些这样的条目。
接下来是关于开发的组织方式。典型的,Scrum 这样的迭代方式,或者精益看板墙来管理的精益方式。后者比前者要更好些。
最后落实到要看当前的发布频率。比如可能是每个迭代末发布。当然也有多个迭代才发布一次或者一个迭代发布多次的情况。
接下来我们顺着生成转换过程了解下,从源代码,然后构建,再到部署运行起来。这些事情一方面是了解情况,比如用没用容器啊,用没用容器编排啊。另一方面和项目团队建立一些共同语言,将来沟通的时候,你说的别人听得懂。
为什么你说的别人听得懂?因为你是用别人的语言来说。比如说,开发环境,在不同的团队里,它的含义就不一样。有时候指的是个人开发环境,还有的时候指的是开发人员共用的一个服务器端的测试联调环境。
最后看一下分支策略。如果想了解流程,那么先看分支策略,因为分支策略是承载了它的流程的。你能看到代码在哪儿 Checkout,在哪儿提交的,在这条分支上怎么被管理的,流程再往下走,提交到新的分支又怎么去管理,你顺着分支就捋下来了,就是一个完整的 DevOps 过程。
1000个项目有1000种分支策略。那你怎么去着手了解呢?有一个小的窍门,就是从这四个角度去了解:
了解完总体情况,下面我们来梳理价值流。这是精益里面的一个方法,沿着软件交付的流程进行梳理,从写下一行代码开始,是怎么一步一步最后发布上线的。通过梳理找到要改进的地方。
既然是沿价值流进行梳理,那我们就解释一下软件交付过程的6个阶段。
所以看起来就是,首先是代码改动的不断累积不断测试,然后 piu,提交上去。接下来是特性分支上改动不断累积不断测试,然后 piu,合并到集成分支。最后是集成分支上代码不断累积不断测试,最后 piu,发布出去。你用这个框架去调研项目实际的交付流程,会让你思路特别的清晰。
我们沿价值流进行了梳理,了解了在流程上,何时发生了什么,各个具体的活动是在什么时候发生的。但是对具体的活动本身,还需要更深入细致的了解。一个活动一个活动地细致深入地了解。
我们把所有的活动分一下类,然后看一下每个分类里面有哪些活动。
左边是非测试的活动。上面是源代码版本控制、构建、构建环境管理、制品管理等,总之是从源代码到构建,再把构建生成的制品储存起来。
下面是部署运行方面的事情,也就是怎么让制品变成运行中的程序,并为它提供环境上的支持。
右边是测试相关的活动。上面是静态测试,也就是靠分析源代码就进行的测试。包括人工的评审,也包括自动的代码扫描和制品分析。
下面是动态测试,也就是让程序跑起来进行的测试。从最简单的单元测试开始,一直到在生产环境下做的测试,比如全链路压测什么的。
那么在考察上述每一种活动的时候,就有若干要关注的点,要考察的点。这得多少内容啊,显然不是我们今天这场演讲能够说清楚的。不过好在,有一本书对此有比较全面的介绍。
这本书是《软件交付通识》,刚才说了六个阶段,然后又说了具体活动,这些内容都在这本书里了。而这个书前面会先讲方法论,会说你为什么要做?到底追求什么?最重要的十个策略是什么呢?等等。这本书已经出版啦,大家可以很方便网购到。这里是在京东的链接。
谢谢大家!
还不过瘾?还想了解更多 DevOps 精彩玩法?还有更多企业如何落地 DevOps 的?
4月21-22日,GOPS 全球运维大会 2022 · 深圳站,BATJ、金融、通信领域 DevOps 议题来袭~,关注 GOPS,运维转型不背锅~
<< 右滑查看下一张图片 >>
近期好文:
投稿邮箱:jiachen@greatops.net,或添加联系人微信:greatops1118.
点个“在看”,少个“bug”