企业如何落地DevOps(下)
这是devops系列的第五篇文章。
前面几篇文章,分别从devops的定义和价值、落地路线图以及落地三要素进行了分析,也概括了企业落地devops过程中的八个关键动作。
这篇文章,我会针对其中的几项工程实践,结合自己的实践经验来谈谈我的理解和一些注意事项。
版本和配置管理
上一篇文章提到了,版本和配置管理要追求的目标是信息一致可追溯,版本信息标准化。
常用的版本和配置管理相关的工具,比如Ansible、Git、Apollo、CMDB等,都是被大家所熟知和广泛应用的工具,也是工程实践的一部分。工具和技术的选型根据各自的具体情况选择合适的即可,但其中有几点注意事项:
- 变更检查:原则上每次配置和版本的变更,无论是代码合并,还是配置信息的变更甚至只是简单修改一个字段,都需要进行检查,评估影响范围。
- 权限管理:权限管理可以看做是变更检查的一个补充,很多时候由于权限分配的松散,导致了很多变更被忽视或者无意掩盖了,进而导致了很多有意思的线上故障。
当然,无论是变更检查还是权限管理,都应该成为软件研发交付流程中的规范,尽可能强制执行。人的行为是无法完全控制的,不能指望员工的个人专业能力和职业素养是完美无缺的,流程规范的目的是为了收敛可能的风险。
部署和环境管理
频繁的编译构建和部署,是软件研发和测试阶段最常见的动作。很多时候我们的精力放在了code review、变更检查、冒烟测试和发现修复bug方面,但在和很多技术同学沟通后,我发现了一些被大家忽略的问题,那就是环境稳定性。
无论是编码、服务联调还是测试执行、发布前的验收,这些动作都是在具体的环境中开展。如果环境不稳定,就相当于在一个漏洞百出的小船上讨论如何遨游四海。
根据我的实践经验,在服务部署和环境管理方面,有以下几点需要引起重视:
- 服务监控:大多数团队只关注生产环境的服务可用性,有完善的监控,测试环境的服务可用性反而不太重视,无形中花费了很多时间来排查环境引起的各种问题,降低了研发过程效率。
- 可控发布:测试环境的发布往往比较随意,很多时候一轮测试还未完成,为了验证所谓的bug修复,就发布一次。对于像微服务这种复杂的系统架构,其实这样做很容易埋下风险。更好的方式是发布的可控,比如:设置发布时间窗口/指定发布权限/发布信息同步/DDL变更的统一等。
持续交付流水线
持续集成和持续交付可以说是软件工程领域的一个重要实践,它提倡的是频繁的将团队成员提交的代码快速的进行编译构建,并且每次集成后自动进行自动化测试的验证工作,以期尽早更快的发现问题并快速修复。
但在实际的落地过程中,往往都会出现这几种典型案例:
- 代码提交后并没有触发完整的流水线;
- 流水线很多时候并没有触发自动化测试,而是通知后手动执行自动化测试;
- 自动化测试之后发现了问题,往往需要很长时间去排查到底是哪里出现了问题;
为什么会出现这种情况,大量的单独的轮子是表象,背后的原因则是各自为战,没有将各个团队独立的轮子能力串联利用起来。比如运维开发了发布平台,测试高了一个自动化测试平台,基础架构的监控平台也是独立的。大家都在建设这种小范围的流水线能力,但在实践过程中,动作都是断开的。
在devops的落地实践中,我个人认为如下几点是衡量持续交付能力的几个重要特征:
- 完整的动作:从提交、打包编译、配置变更、服务部署到测试执行、结果反馈,是否是连贯快速的。
- 及时的响应:出了问题能否及时响应,是否有丰富的问题应对策略(案例沉淀、知识库)。
可视化持续度量
还记得前面文章提到过的VSM价值流图吗?它最重要的特点是提供全局视角、快速识别问题、促进团队合作、驱动质量度量以及体现技术价值。VSM的几个关键要素如下:
- 前置时间:需求从提出到上线的时间周期,体现了研发团队的交付速率,用来计算交付吞吐量。
- 增值活动时间和不增值活动时间:减少无意义的会议、频繁的需求变更、不断reopen的bug等。
- 完成度和准确度:有多少工作因为质量不符合要求而被打回,比如一句话需求、冒烟测试不通过。
在实际的研发测试活动中,很多时候我们的注意点在单元测试覆盖率、测试用例覆盖率、bug数等更容易量化的指标上,这些纯技术指标对于工作量的评估是有一定的借鉴,但工作量真的等于创造了有意义的价值吗?不一定!
同样,很多公司推行站会、早会、周会例会,也有类似看板的可视化大盘,但这些东西最后大多变成了向上汇报的PPT。
可视化的目的是为了同步信息,降低信息差带来的无形成本,识别低效率环节并加以改善。持续度量是需要基于价值流来定义明确的有价值的目标,然后选择合适的指标和数值来评估研发过程,衡量交付结果。
可视化和持续度量,二者本身需要关联在一起,才能真正实现devops最本质的目标:
- 在保障交付质量的前提下提高软件研发交付效率;
- 高效的交付支撑了业务目标更快达成,技术和业务互相促进闭环;
- 业务目标达成更有利于企业员工自身跟着平台成长而获利和成长;