一.简介

Wiki上讲:DevOps(Development和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例 (这个是目标)透过自动化“软件交付”和“架构变更”的流程(这个是方法)来使得构建、测试、发布软件能够更加地快捷、频繁和可靠(这是结果)。

所以对于企业来说的真正价值则在于通过团队间协作关系的改善, 整个组织效率的提升的同时,可以有效降低伴随频繁变化而带来的生产环境风险,从而提升企业应对市场变化响应力。

根据2016 DevOps调查报告显示。成功实施DevOps组织可以更快的去适应整个市场环境的变化,同时能够更快的做出调整。

拥有相比竞争对手拥有更加高的部署频率,更快的故障恢复时间,更低的变更失败率以及以及更短的需求交付周期。

然后当企业大量的采纳并使用这些新的工具链之后,我们并没有看到我们所交付的软件真的如同DevOps的目标一样,能够真正的实现软件快捷,频繁并且可靠的交付。

DevOps不是盲目的使用新的工具链和技术栈,通过自动化部署流水线的方式,将低质量的代码频繁的部署到运行环境。

目前实施DevOps转型的传统企业,通过引入自动化确实能提升在软件交付的某些环节中的效率,但是却很难去提升软件的交付质量,依然引入独立的测试部门进行大量的系统测试来确保软件的质量,同时企业也很难度量持续交付和DevOps实施的效果。

所以目前大部分企业基本上是把自动化当做DevOps在做,把自动化部署当做持续交付在做,而很少去考虑软件交付流程的整体性优化。

自动化是实施DevOps的先决条件但是并不能真正的帮助企业跨越DevOps转型的鸿沟的银弹。

而对于DevOps的成功转型而言,我们需要做的是持续的对我们的软件交付过程进行优化,发现软件交付过程各个环节中存在的瓶颈并持续改进。

You Can’t Fixed What You Can’t.

而数据和度量则是帮助企业去发现DevOps转型过程中的瓶颈并且做出改进的关键基础。

二.度量是什么

在开始时我们说从Wiki上看,DevOps会主要设计到3个部分:目标,方法和结果。

所以从度量的交付上看我们需要从两个方面去度量我们的DevOps转型。哪些度量指标是能够支撑企业判定DevOps转型结果。而哪些是能够去评判软件的交付过程,并且用于发现交付瓶颈的。

根据2016DevOps报告显示,目前度量企业DevOps转型是否成功的最终结果性关键指标包括:

吞吐量指标:部署频率,变更交付周期。

稳定性指标:变更失败率,问题平均恢复时长(mean time to recover)。

吞吐量即敏捷性,确保企业能够适应市场的变化,并且快速做出反馈。稳定性,即高质量。

相比于传统的IT服务流程绩效指标ITIL而言,DevOps更加关注结果性指标, 即客户价值。

就好比我们做软件交付和外卖小哥其实很像,可以评价一个产品是否优秀更多的是看交付效率如何,质量如何,并且是不是能够满足我的预期的?

这两种截然不同的度量方式本质就是OKR和KPI的区别:

OKR基于目标和关键成果,促使我们思考,沟通,每个人都知道什么是最重要的;并且能让团队所有人共同的为某件事而努力。

所以对于基于OKR驱动的DevOps可以确保参与软件交付过程中的所以角色围绕具有通过的目标,并且为了这些共同目标去尝试新的技术和方法。

而KPI理论则避免按照SMART标准制订,有些事情值得去做,但在做出来一部分之前无法测量因此无法制订目标。KPI 还有一个更严重的问题,那就是为了完成可测量的目标,有可能实际执行手段与该目标要达到的愿景正好相反。

KPI使得团队使劲往前走,而OKR则确保团队能够往正确的方向走。而在软件交付过程中,开发,测试,运维都有着不同的考核标准。所以KPI能够团队各个成员使劲的按照各自的目标走,而OKR则确保团队能够一起往正确的方向走。

DevOps需要的是整体性的优化,当你选择自己企业内部的度量标准时,请问自己两个问题:

为什么需要度量这个指标?从这个指标中我们能学到什么?

根据DevOps 2016报告高效的IT组织与中等和低效的IT组织之间在DevOps最终结果性关键指标存在则显著的差异。

DevOps的最终结果性指标能够帮助企业去衡量和评判DevOps转型的结果。

当然除了结果性的指标去验证DevOps转型所起到的作用以外,我们还需要持续的度量其他的数据去帮助我们发现在软件交付各个阶段的问题。

包括从需求管理,源码管理,构建过程,测试过程,部署过程,发布,配置管理,监控等各个方面,这里我们列举了在各个过程当中可能需要的一些度量数据。

其中比较典型的包括通过对需求管理进行度量,我们可以知道从需求到需求部署上线的变更交付时间。

在CI过程中我们持续的去获取相关的过程数据,如构建次数,构建频率,构建时长,成功率,平均恢复时间等可以帮助团队去判定研发团队是否能够做到小步提交,频繁提交,并且当发现问题之后能够快速的恢复。

除此之外,低质量的,高复杂度的代码也会使得软件交付效率无法得到有效提升,所以我们需要持续的获取代码质量相关的数据,持续改进代码质量等等。

所以对于度量驱动的DevOps转型而言,我们需要持续的去获取在软件交付各个阶段所产生的数据,以及软件部署上线之后的监控数据,用户行为数据等,并且形成对团队所有人可见的DevOps可视化看板。

而产品/需求管理人员,则可以根据DevOps结果性数据去评价在过去一段时间内DevOps实施所产生的效果,从过程性数据中去发现交付过程中的瓶颈,根据用数据以及线上监控数据去评价软件产品是否如预期的一样产生相应的价值,如果没有,是否应该做出及时的调整。

除了通过自动化的方式去构建软件交付的端到端流程提升软件交付,并且持续的获取软件交付的各个阶段所产生的数据以外。

我们还应该在软件交付流程中去设置相应的门禁机制,去让不满足质量要求的构建快速失败。

三.实践

在实践当中,根据软件产品的体量的不同完整运行端到端自动化的过程可能会非常长。

所以对于研发团队而言,持续部署流程所产生的反馈周期过长,不利于研发团队快速发现和解决问题。

  1. 基本CI流水线频繁执行,由代码提交触发,包含构建,单元测试,集成测试,代码静态扫描,部分自动化验收测试等(端到端运行周期短)。
  2. FOR TEAM:全量流水线每日定时多次触发,包含构建,单元测试,集成测试,代码扫描,全量的自动化验收测试,部署,部署冒烟测试等等(端到端运行周期长)。
  3. FOR QA:手动指定版本部署,手动触发。

通过分层流水线,在满足快速反馈的原则的同时,又能持续的对软件进行集成和测试。

同时在流水线当中通过引入质量门去控制代码质量,避免技术债务的积累。

当然对于历史遗留系统而言,通常会存在大量的历史债务,这时候我们可以将当前系统的代码质量作为基线标准,同时针对新增代码设置质量门控制,包括新增代码的代码风格,复杂度,测试覆盖率等。

通过可视化流水线将将持续部署流水线的构建过程向整个团队进行展示,让所有人都知道当前的项目构建状态以及进度,如果又构建失败了,成员之间也可以相互提醒尽快修复流水线的失败。

持续的获取过程有效性数据和质量有效性数据为团队提供可视化看板。

除了门禁机制以外,质量内建也是团队成功实施DevOps的关键因素,通过在软件交付的各个阶段建立自动化的保障体系可以使团队能够尽早的发现和解决发现的缺陷。

对于度量驱动的DevOps转型,通过自动化部署流水线有效提高软件交付的效率,通过质量内建确保软件交付的质量,通过对过程性数据的持续收集和分析发现交付过程中存在的瓶颈,通过对软件产品和用户的线上数据获取反馈并且及时作出调整,通过结果性数据去评价团队的成效。

最后对于企业DevOps转型而言:

Automation 自动化是实施DevOps转型的先决条件,自动化一切可以自动化的,降低部署和发布的难度。

Measure 通过建立有效的监控与度量手段来获得反馈,推动产品和团队的持续改进,支持业务决策。

Lean 协作文化,自动化,和有效的反馈,这些实施是个长期的过程,需要以精益的方式小步快跑,对过程与技术进行持续改善。

Culture OKR目标和关键成果驱动 建立具有跨职能协作文化和共同目标的一体化团队;这是DevOps运动的根本!

Sharing 不同职能、不同产品之间分享开发和运维过程中的想法,知识,问题,以及失败经验,共同提升能力。

四.QA问答

Q:基于Jenkins的CI/CD不同用户是怎么管理的 ?权限怎么控制的?

A:在DevOps实施里面提倡充分授权团队,所以在基础设施自服务的基础上让团队有自己独占的Jenkins Master能够有效的减少权限控制此类问题,同时可以避免不同团队之间构建任务的相互影响;如果是共用JenkinsMaster,Jenkins有权限控制的插件可以控制用户的权限。

Q:刚才你介绍的CI整个交付流程,每个细节都需要花大量的时间和精力去开发和实施,如果公司团队很多,如果分配自己团队的时间,时间少了自然达不到效果。

A:在实施DevOps转型过程里面,可以先尝试试点团队,通过试点团队去完成DevOps工具链相关的技术选型,在工具链成熟的情况下向其它团队推广。

Q :请问你们有DevOps的自动化运维平台吗?可能是一个Web页面,把DevOps相关的流程和工具集成在上面,方便管理的同时也方便运维开发一体化操作。这个平台可能还包括全链路检测系统?

A:目前我们公司做的基于容器持续交付平台主要就是解决此类问题,通过流水线来组织工具链,同时对相关的环节进行度量,为避免广告嫌疑就不便多说。

Q: 你们在这个过程中怎么做沟通管理,以防止因为这造成的对需求理解的偏差等问题?

A:这块更多是团队的组织结构的问题,有兴趣可以尝试通过看板方法,团队的各个角色都会基于看板完成迭代的开发,通过看板可以帮助团队成员之间的沟通和需求确认。

Q:因为很简单,持续集成持续交付,快速迭代,小步快跑,稳扎稳打,这些都有所有的理论最后都回归到代码,所有的变更都回归到本源代码的变更,如何保障所有的变更无遗漏,如何保证每一次任务都在正确的代码基准线上进行,如何出了问题快速反馈到研发第一线,及时终止问题的蔓延?

A:这块其实主要的方式就是基于持续部署流水线的方式,上面分享的时候有提到。通过将流水线通过自动化流水线的方式进行控制,在任何阶段出现问题都应该让流水线失败(门禁),另外出问题不怕,快速解决问题是关键,对于流水线最好可以设置Webhook实时触发,可以确保当问题出现后,问题代码的域可以关联到最近的一次提交。

Q:请问你们容器发布是如何自动区分开发、测试、正式等不同环境的,是否需要人工介入修改应用访问关系和启动环境变量?

A:目前我们自己持续交付平台对接不同的容器运行环境(目前主要是Rancher),团队会对环境进行分类管理,流水线中进行容器部署的时候选择相应的环境即可;另外由于主要是基于容器在做,所以也对容器镜像的不同状态也进行了划分,并且在多个Registry实例之间进行了流转,物理隔离了开发,测试以及发布状态的容器镜像。人工介入的部分主要是控制镜像状态的变化这块。

Q:Jenkins的Pipeline和普通的Project都可以支持流水线 ,2者有区别吗?

A:主要解决的问题就是当构建出问题的时候如何快速定位问题,假如在流水线线中涉及8个阶段,如果只是在一个Project中实现,需要开发者花很多时间定位;如果是Build Pipeline的话,则可以很直观的知道问题是发生在什么阶段。

度量驱动的DevOps实现的更多相关文章

  1. 2019 DevOps 必备面试题——DevOps 理念篇

    原文地址:https://medium.com/edureka/devops-interview-questions-e91a4e6ecbf3 原文作者:Saurabh Kulshrestha 翻译君 ...

  2. 大话devops

    一.敏捷的局限性的促使devops诞生 敏捷的局限性:敏捷只注重开发阶段的敏捷,未涉及到整个产品生命周期流程其他环节导致采用敏捷开发流程后效果不明显. devops成为企业数字化转型的助推器,扮演基础 ...

  3. 微服务ServiceMesh及三种模式介绍

    1. 前言 今年,ServiceMesh(服务网格)概念在社区里头非常火,有人提出2018年是ServiceMesh年,还有人提出ServiceMesh是下一代的微服务架构基础.作为架构师,如果你现在 ...

  4. 【5min+】为你的.NET应用进行一次全方位体检

    系列介绍 [五分钟的dotnet]是一个利用您的碎片化时间来学习和丰富.net知识的博文系列.它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net ...

  5. CODING DevOps 助力中化信息打造新一代研效平台,驱动“线上中化”新未来

    中化信息技术有限公司,简称"中化信息",是世界 500 强企业中国中化控股有限责任公司(简称"中国中化")的全资直属公司,依托于中国中化的信息化建设实践,建立起 ...

  6. DevOps on DevCloud|如何实现应用接口的混合驱动测试

    引言:在"DevOps能力之屋(Capabilities House of DevOps)"中,华为云DevCloud提出(工程方法+最佳实践+生态)×工具平台=DevOps能力. ...

  7. DevOps研发模式下「产品质量度量」方案实践

    在当今互联网环境下,需求变更越来越快,交付周期却越来越短, 怎么判断一个系统是否测试充分? 产品质量满足什么样的条件才能投产? 如何判断测试工作.研发团队工作的效率是高还是低? 这些问题不能靠感觉.拍 ...

  8. Infrastructure as Code 行为驱动开发指南 https://www.ibm.com/developerworks/cn/devops/d-bbd-guide-iac/index.html

    Infrastructure as Code 行为驱动开发指南 https://www.ibm.com/developerworks/cn/devops/d-bbd-guide-iac/index.h ...

  9. 业务驱动的全景监控体系在阿里的应用 | 阿里巴巴DevOps实践指南

    编者按:本文源自阿里云云效团队出品的<阿里巴巴DevOps实践指南>,扫描上方二维码或前往:https://developer.aliyun.com/topic/devops,下载完整版电 ...

随机推荐

  1. CAP 5.2 版本发布通告

    前言 今天,我们很高兴宣布 CAP 发布 5.2 版本正式版,在这个版本中,我们主要致力于更好的优化使用体验以及支持新的 Transport,同时在该版本也进行了一些 bug 修复的工作. 自从 5. ...

  2. python实现圆检测

    目录: (一)霍夫圆检测原理 (二)代码实现 (一)霍夫圆检测原理 (二)代码实现 1 #霍夫圆检测 2 import cv2 as cv 3 import numpy as np 4 5 def d ...

  3. Java 如何对文件进行多个Object对象流的读写操作

    思路:把已经序列化的对象存入容器(如LinkedList<?>)中,然后用ObjectInputStream和ObjectOutputStream对这个实例化的LinkedList< ...

  4. [atAGC106F]Figures

    考虑purfer序列,若生成树的pufer序列为$p_{i}$,则答案为$(\prod_{i=1}^{n}a_{i})\sum_{p}\prod_{i=1}^{n}\frac{(a_{i}-1)!}{ ...

  5. FastAPI(六十二)实战开发《在线课程学习系统》需求分析

    前言 基础的分享我们已经分享了六十篇,那么我们这次分享开始将用一系列的文章分享实战课程.我们分享的系统是在线学习系统.我们会分成不同的模块进行分享.我们的目的是带着大家去用fastapi去实战一次,开 ...

  6. Redis | 第5章 Redis 中的持久化技术《Redis设计与实现》

    目录 前言 1. RDB 持久化 1.1 RDB 文件的创建与载入 1.2 自动间隔性保存 1.2.1 设置保存条件 1.2.2 dirty 计数器和 lastsave 属性 1.2.3 检查保存条件 ...

  7. 洛谷 P5518 - [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题(莫比乌斯反演+整除分块)

    洛谷题面传送门 一道究极恶心的毒瘤六合一题,式子推了我满满两面 A4 纸-- 首先我们可以将式子拆成: \[ans=\prod\limits_{i=1}^A\prod\limits_{j=1}^B\p ...

  8. LG 11 月 月赛 II T4

    LG 11 月 月赛 II T4 看到膜数和 $ 10^5 $ 以及 $ n^2 $ 的部分分想到很可能是 NTT 于是开始推式子 首先看到式子可以化作, 如果 \(k = 0\) , $ f(l , ...

  9. 学习资源 Docker从入门到实践 pdf ,docker基础总结导图

    学习资源 Docker从入门到实践 pdf ,docker基础总结导图 Docker从入门到实践 pdf 云盘地址:https://pan.baidu.com/s/1vYyxlW8SSFSsMuKaI ...

  10. Markdown-写作必备

    Markdown--入门指南 导语: Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用.看到这里请不要被「标记」.「语言」所迷惑,Markdow ...