今天我们继续聊下如何打造企业级的DevOps工具。上次我们主要阐述了打造企业级DevOps工具的原则,介绍了国内外知名的商业和开源DevOps产品,不了解的小伙伴可点击:,今天我们主要聊下自建DevOps平台工具的实践原则和流水线方案。

01 企业对 DevOps 工具和技术的选择

《中国DevOps现状调查报告(2023年)》中,关于企业对 DevOps 工具和技术的选择描述如下:

产品/服务价格、工具自身的安全性、DevOps 工具厂商知名度成为企业在选择DevOps 工具时的首要考虑因素。

调查显示,近四成的企业优先考虑产品/服务价格;32.84% 的企业更为关注工具自身的安全性;29.41% 的受访企业较为看中 DevOps 工具厂商知名度;29.32%的企业关注工具自动化程度,27.68% 的企业会考虑功能的丰富性。

超四成企业重视 DevOps 工具的自主可控、软件适配性、技术自主性及信息安全。

软件适配性强是团队对 DevOps 工具软件自主可控的最重要考量因素,占比达到48.23%。保障信息安全也是团队对 DevOps 工具软件自主可控的重要要求之一,占比为 43.73%。

DevOps 工具市场呈现繁荣发展、百花齐放态势,一体化 DevOps 平台备受企业关注。 调查显示,选择占比超过两成的 DevOps 平台类工具为 Gitee DevOps(25.49%)、微软 TFS/Azure DevOps(22.76%)、腾讯云 CODING(20.68%),选择其他工具的占比分别是腾讯蓝鲸(18.23%)、阿里云云效(18.05%)、GitLab/极狐 GitLab(17.11%)、华为云 CodeArs(16.62%)。

由此可见,自研/对开源工具进行二次开发的DevOps平台工具是企业考虑的重要选项之一,因为自主可控性更强,也更方便根据企业自身需求灵活定制。但是,需要考虑的是,建设一个优秀的DevOps平台,成本还是比较高的,需要综合考虑自研和商业产品的方案。

顺便提下,对于 DevOps 实践成功的标准,多数企业聚焦在按时交付、研发和交付效率的提升、业务成功、客户/用户满意度四个方面。调查结果显示,上述四项具体所占比例分别为 38.00%、33.45、31.20% 和30.35%;超过 20% 的关注点有:研发过程的质量提升(28.84%)、交付的业务价值(28.62%)、团队的满意度(28.07%)、产品质量(24.38%)。

02 自研DevOps工具的建议

对标业界先进原则和国内外知名DevOps平台的建设经验,笔者结合多年的DevOps平台实践经验,给出如下实践原则:

1、建设平台而非能力中心,串联上下游角色和日常工作,始终以顺畅的产品/需求价值交付为目标,设计平台工作流。

我们首先需要建设的就是流水线平台,《中国DevOps现状调查报告(2023年)》指出:流水线作为持续交付环节重要生产工具,60% 受访企业已进行流水线建设,流水线平台全流程自动化的占比为 28%。超九成企业实现部署发布自动化,服务部署自动化已成为行业内不可取代的部署方式。

流水线是价值流交付的载体,流水线的顺畅程度直接带动产品需求顺畅交付。好的流水线帮助IT人员减少重复度高、繁琐的环境准备、手工测试、软件包部署等诸多工作,增加工作的顺畅度,提升公司IT人员的工作效率,也能提升IT人员的幸福感。

2、能够覆盖软件交付全流程。

流水线想要发挥更大效益,必须能够覆盖从需求、开发、测试、发布到运维的软件交付全流程,这样才能承载价值流的完整交付。

3、面向软件交付各角色,产品经理、开发人员、测试人员、运维人员全受益。

需要针对不同角色提供不同的工作台,清晰地指出各角色人员的进行中任务、待办事项和已完成任务,也可以查看他关注的项目、需求或任务,方便各角色的协同与提效。

4、流水线平台需要承载流程规范,也是内建质量的最好阵地。

流水线平台贯穿软件交付全生命周期,从需求到设计、从设计到开发、从开发到测试、从测试到上线、从上线到运维,每个流程都要有基本规范,每个阶段都要有质量门禁。比如,需求要进行价值评估,那流水线可以限定未经过价值评估的需求状态不能往下流转。再比如,开发之前要进行技术方案设计,测试之前要约定核心代码的单元测试覆盖率为100%,这些质量门禁都可以内置到流水线平台中,DevOps的内建质量理念才能得以实施,这样才能真正保障软件质量。没有流水线平台,内部质量就缺少实施的必要条件,就只能沦为一个口号,迟迟无法着陆!

5、流水线灵活可编排,平台需要生态化,支持插件机制。

流水线必须是灵活的,因为不同团队的诉求不同。持续集成(CI)的原子操作和持续交付(CD)的原子操作也是有较大差异的,不同团队的流水线步骤和操作也是不同的。平台要满足企业不同团队的需求,必须做到灵活可编排,要做生态,很好地支持插件机制。

6、流水线与项目管理平台、开发框架、测试平台、运维平台要深度结合,以需求和应用贯穿整个交付流程。

需求作为贯穿各个平台的主线,需求价值层面是项目、是需求,工程层面是应用、是服务,两者要有机结合起来。产品关系的维度是需求,研发、运维关注的核心是应用。一次需求的上线也可能会关联多个应用,每个应用会关联测试用例、不同的运维组件,不同的需求又有所差异,不同的应用所需的基础资源又不同,导致虽然有了流水线,但是上线流程许多时候还是不可控。需求和应用之间的依赖关系又加剧了这个问题。

比较好的解决方案是,应用是尽可能标准化的。比如,如果开发框架采用的是微服务,微服务的脚手架中可以定义所有这个应用所需的资源,比如代码的migration目录中存放sql文件,如果这个目录有变更,意味着本次需求上线时,要自动增加一个数据库操作的步骤,可以自动执行或者需要开发人员确认执行。

除了与开发框架的结合,流水线与项目管理平台、测试平台、运维平台的结合同样如是,这样就能更好的实现流水线的自动化、智能化,真正做到高效、顺畅地交付,真正实现一键式的流水线。

7、能够快速接入外部平台。

流水线要能支持项目管理平台、测试平台、运维平台的快速接入,定义好标准接口,自动生成流水线平台相关的代码都是有效的手段。

8、一站式协同,高度自动化,让各角色聚焦价值交付

除了出色的平台设计,我们需要明确各角色不同人员的使用场景和不同需求,比如产品人员查看项目进度、开发人员创建开发分支等。应让各角色聚焦价值创造的工作,比如需求状态的自动流转,研发提交代码,需求状态应自动更新,而不是还需要开发人员手工操作。

9、高度重视流水线的易用性和安全可控。

流水线是载体,能集成项目管理平台、代码管理平台、测试平台、运维平台的各个能力,这些平台的规则不同,流水线就是粘合剂。流水线需要定义一套通用的标准来描述行为,这样用户可以屏蔽各个平台的差异,而只关注流水线本身的定义即可。

每个角色都可以使用自己熟悉的方式定义,比如开发使用应用服务的代码定义,流水线负责解析,两者之间约定好规则即可。这样就能大大地方便相关人员,降低使用门槛。

流水线也需要安全可控,所有流水线的配置应纳入版本管理,流水线的运行应全流程可追溯,这样出现问题也能第一时间回溯。高度自动化的同时,也能支持人工紧急介入,这样能够在意外发生时及时止损。

10、数据口径对齐,数据驱动持续改进。

管理学大师彼得 · 德鲁克(Peter Drucker)曾经说过,“一个事物,你如果无法度量它,就无法管理它”(If you can’t measure it, you can’t manage it)。使用不同开源平台的一大弊端就是,数据口径无法对齐。我们建设自研流水线平台时,要实现考虑数据如何计算、如何采集,DevOps的四大结果指标如何统计等。有了数据才能驱动我们更好地改进。

image

03 如何开始第一步

一个完善的DevOps平台绝不是一蹴而就的,需要我们勇敢地迈出第一步,之后逐步迭代,这也正是DevOps的核心理念之一,快速迭代,小步快跑。

1、流水线先行,构建基础能力。

我们可以先快速构建起一个流水线平台,在此基础上再逐步完善,如果各个角色之间已经有了自己的平台,那么就可以把这些平台逐步集成进来。

流水线的核心是一个可编排的工作流,我们可以先构建这个模块,市面上的流程引擎很多,我们可以选用Argo workflows等等。借助于开源平台和自研内部系统可以快速搭建出流水线平台。

一个建设流水线的案例如下,流水线可拆分为开发测试流水线和发布流水线,整体流程及设计如下:

image.png

流水线的详细设计如下:

image.png

2、完善各阶段工具并集成到流水线中。

初步建成流水线后,就可以以流水线为中心扩展外部系统,持续完善研发流程规范和内建质量门禁规则,逐渐建成内部DevOps平台的生态。

3、快速迭代、小步快跑、持续改进

内部DevOps平台的建设肯定不是一蹴而就的,要实现功能完备的平台,需要持续从问题出发,锚定企业落地DevOps的目标,迭代平台助力目标达成。同时也要注重数据收集,验证当前的猜想和实现效果是否符合预期,不符合预期需要及时调整。

04 总结

今天,我们聊了企业对DevOps工具的选择,并给出了自建DevOps平台的原则指导,包括:

1、建设平台而非能力中心,串联上下游角色和日常工作,始终以顺畅的产品/需求价值交付为目标,设计平台工作流。

2、能够覆盖软件交付全流程。

3、面向软件交付各角色,产品经理、开发人员、测试人员、运维人员全受益。

4、流水线平台需要承载流程规范,也是内建质量的最好阵地。

5、流水线灵活可编排,平台需要生态化,支持插件机制。

6、流水线与项目管理平台、开发框架、测试平台、运维平台要深度结合,以需求和应用贯穿整个交付流程。

我们认为:建设流水线平台应该作为DevOps平台建设的第一步,并且也给出了一个建设实例,给出了相关的整体设计和模块设计。

DevOps平台工具建设之路任重道远,我们听过太多DevOps的实施方法和路径,却无法享受它带来的巨大好处,差的就是先干再说的勇气和决心吧。

文末福利派送:

关注公众号「程序员Aike」,回复「DevOps2023」,获取完整版《中国DevOps现状调查报告(2023年)》。