今天我们聊下如何打造企业级的DevOps工具,提升公司的研发效能。
在「如何建设企业级研发流程规范?」一文中我们提到,建设企业级研发流程时我们需要学习先进,不只是规范和实践,DevOps工具的建设就都应该学习国内外先进原则、理念和优秀的商业、开源产品。
01 建设DevOps工具的原则指导
打造企业级的DevOps工具是一个系统工程,完整的DevOps工具需要覆盖需求管理、开发、测试、发布、线上运维的方方面面,而且要服务好产品经理、后端开发、Web前端开发、移动端开发、测试、运维、安全等各个角色,而且也涉及一线人员、技术管理、高层管理者等不同层级的人员,复杂度可见一斑。
幸运的是,软件的世界是开放的世界,每一位从业者都深受“开源文化”的影响,大家都热衷于分享,争做布道者。因此,我们可以先看下业界是怎么做的。
在《软件研发效能权威指南》一书中,茹炳晟和张乐老师详细阐述了研发效能的实践框架——研发效能的“黄金三角” 和 研发效能平台的“双流”模型^[1]^。
“黄金三角”的重要一角是效能平台,平台的建设是一站式、一体化的效能平台,要支撑软件交付全生命周期,并满足以下四个特征:
1、自动化:这也正是DevOps的“自动化一切”的价值主张。
2、自助化:上下游角色可以通过平台紧密衔接,按需、自助地使用平台。
3、场景化:按照研发场景,而不是功能组织平台,提升平台易用性,如通过产品或需求贯穿DevOps流程,方便产品管理、开发人员创建特性分支,以应用为中心对开发、测试、运维更加友好。
4、生态化:搭建平台需要支撑的业务负责、规模庞大、业务场景众多、不同团队不同角色工作习惯差异大,要减少各团队重复建设、重复造“轮子”。所以,要做开放的平台,打造插件化、易于接入的平台底座,做生态,而不是做功能堆砌。
平台建设切忌开始就追求“大而全”,“一站式、一体化”也只是手段不是目的,最终以能满足研发场景的诉求为主。

“双流”模型也给我们详细阐述了需求价值流和研发工程流的关系,强调了双流的双向自动联动,让各角色人员聚焦价值创造工作内容的核心原则,理想是做到“一站式”和“一键式”部署等^[2]^。比如,开发人员完成代码开发后,不用去操作更新需求状态,而是由平台自动把需求状态更新为开发完成,自动提醒测试和产品人员开展下一步工作。这样,开发人员也可以更聚焦编码开发这个真正的价值创造活动中,减少不必要的人工操作、上下文切换、心智负担造成的精益浪费,提升研发效率。

石雪峰老师在专栏《DevOps实战笔记》中也提出了现代持续交付流水线的十大特征^[3]^。包括:
1、打造平台而非能力中心:唯一一个贯穿软件交付端到端完整流程的平台,流水线平台仅作为任务的调度者、执行者和记录者,并不需要侵入垂直业务平台内部。核心就是构建一个企业内部 DevOps 平台的良好生态。
2、可编排和可视化:用户可以自行定义软件交付过程的每一个步骤,以及各个步骤之间的先后执行顺序。
3、流水线即代码:流水线配置即代码,纳入版本控制系统(如Git)管理。
4、流水线实例化:流水线需要支持参数化执行,支持并行执行。
5、有限支持原则:满足大多数、常见场景的快速使用,提供通用原子类能力,比如编译、自动化测试调用、部署等,但不支持特定业务场景的特定需求,需要业务自己实现插件并接入平台。
6、流程可控:支持前置、后置操作,预留钩子支持扩展能力,必要时也可人工干预,保障流程可掌控,以便可以人工介入处理紧急事件。
7、动静分离配置化:就是将需要频繁调整或者用户自定义的内容,保存在一个静态的配置文件中。然后,系统加载时通过读取接口获取配置数据,并动态生成用户可见的交互界面。无论在原子结构设计,还是前后端交互等领域,定义一个通用的数据结构是设计标准化的系统的最佳实践。
8、快速接入:支持外部平台快速接入,实现插件化机制,为降低接入成本,可以自动化生成平台关联的原子代码。
9、内建质量门禁:持续交付流水线是内建质量的最好阵地,具体表现形式就是质量门禁。可以是一系列规则的组合,比如单元测试覆盖率100%、严重阻塞代码问题等于 0 等等。
10、数据聚合采集:满足用户对最基本的结果数据的查看需求。
石老师还表示:一个好的持续交付流水线平台,就是企业 DevOps 能力的巅峰展现。建设这样的一个平台并不容易,需要永无止境的追求,在流水线建设之路上不断思考,不断实践,持续精进。
这些原则不可谓不经典,如果你真是做过平台建设相关工作,并且走了些弯路的话,你会发现石老师提出的真真是真知灼见。就拿第一个特征“打造平台而非能力中心”来说,如果一开始不建设平台,而是各个团队在各自专业领域独自做自己工具的话,随着团队的扩大,一般产研团队达到200人时,工具割裂、日常使用工具频繁切换成本高、易用性差、需求开发测试上线过程涉及多个平台混乱度高、使用成本极高,数据口径无法统一、数据采集难导致无法度量的问题日益凸显,研发人员对工具的满意度也越来越低,阻碍研发效能提升。
聊完国内的优秀经验,我们看下Facebook是如何做的,葛俊老师在专栏《研发效率破局之道》里面提到Facebook工具建设的一大原则就是:不要阻塞研发人员。开发流程的顺畅是生产优质软件的关键因素,只有这样才能最大程度地释放开发者的创造性和积极性。软件开发本质上就是一条超级灵活的流水线,要注重开发者体验,也很难用一条高度定制的流水线来满足各种各样的高效开发,因此可以使用开发者桌面+工具之间网状连接的形式构建企业内部的研发平台和工具。示意如下:

平台工程作为当前最流行的技术趋势之一,毫无疑问是我们做DevOps工具时必须学习对标的。提效业务价值交付、构建专门的工具团队、打造内部开发平台的产品、自助化和注重开发者体验,平台工程的这些优秀理念很好地回答了我们怎么建设企业级的DevOps工具。

02 商业和开源产品
接下来我们来盘点下国内外优秀的商业和开源产品。
商业DevOps产品大多主打一站式研发体验,包括需求管理、知识管理、代码管理、持续交付流水线、研发效能度量等模块,以SaaS服务形式提供,包括阿里云效、华为Devcloud,腾讯云CODING、ONES等。对于产品设计、开发需要的微服务组件、测试平台、运维平台等专门领域,DevOps平台也能扮演集成者的角色把他们连接起来,像云厂商会直接与自己的相关产品结合。阿里云效^[4]^产品的能力示例如下:

ONES的产品界面可能会给你更直观的感受^[5]^:

国外的DevOps商业产品在国内使用最广的要数Azure DevOps^[6]^了。产品能力大致包括需求管理、流水线、Git仓库、测试、代码包制品管理等等。如图所示:
除了整套DevOps产品,在项目管理、需求管理、知识管理等领域也有知名产品,包括项目管理Jira、知识管理平台Confluence等。当然Atlassian公司也提供了其他DevOps相关的产品^[7]^:
再说下开源产品,这块就比较多了,像CI/CD领域有Gitlab-CI、Jenkins、Argo CD,开发框架有Spring Cloud(Java)、Kratos(Go),代码检查与测试方面有Sonarque、Jmeter、Promtheus、Thanos、Grafana等,这些优秀开源产品也大多有商业版本,有公司背书会发展比较成熟。
DevOps的流程长,涉及工具很多,DevOps 知识和工具平台 Ledge 推出了 DevOps 元素周期表^[8]^,涵盖了行业知名的开源和商业产品,如下图所示:

03 我们在企业中如何落地DevOps工具?
任何先进的理论都是不能生搬硬套到自己的企业的,要从企业要解决的问题出发,明确企业自身落地DevOps工具的目标,借鉴以上先进理念原则和优秀产品工具的设计,落地适合自身企业发展现状的产品。
取其精华,去其糟粕,结合公司现状和发展阶段,以终为始,紧盯公司的目标和遇到的真实问题,落实DevOps工具去解决才是正解。我们需要理清DevOps的需求和限制条件,包括企业落地DevOps的目标,愿意投入的成本,代码安全、项目涉密等方方面面关注的要素,并与企业管理层达成共识。
虽说每个企业的情况不尽相同,但是我们仍可以尝试总结出一条通用路径去落地DevOps工具,基于这条通用路径去实施,实践过程中遇到问题时灵活调整策略,群策群力去解决,或许就是打造企业级DevOps工具的良方了。接下来,我们会给出DevOps工具的具体实践路径和案例,敬请期待!
参考链接:
[1] https://book.douban.com/subject/36116375/
[2] https://coding.net/help/insight/devopsguide
[3] https://time.geekbang.org/column/article/175056
[4] https://www.aliyun.com/product/yunxiao?spm=5176.20960838.J_XmGx2FZCDAeIy2ZCWL7sW.21.35782868atciSM
[5] https://ones.cn/
[6] https://azure.microsoft.com/zh-cn/products/devops
[7] https://www.atlassian.com/zh#
[8] https://devops.phodal.com/home