课程介绍

从 2009 年第一届 DevOpsDays 算起,DevOps 已经经历了 7 年,即将迎来自己的第 8 个生日。然而,DevOps 工具繁多,概念不一,使得 DevOps 知识体系逐渐庞大,难以下手。本课程从 DevOps 历史源头出发,追踪 DevOpsDays 全球发展动态,并结合作者过去 4 年在国内外进行 DevOps 咨询和实践过程中的经验总结而成,每一个实践和方法均来自于真实客户的实践案例,相关的敏感信息已经做了删改。

本课程针对的读者是想进行 DevOps 转型的组织领导者和实践 DevOps 转型的咨询师或敏捷教练,共包括 10 篇文章,其内容涉及 DevOps 转型的评估、设计和落地,每部分环环相扣,并配有案例讲解和实践示例,能够帮读者更快的依据所在上下文设计出更好的 DevOps 评估和落地方案。

由于作者水平和经历有限,对于各种不同的组织的 DevOps 转型情况不可能面面俱到,还望和读者进一步交流和学习,进一步提升课程的品质。

作者介绍

顾宇,ThoughtWorks 高级咨询师,专注于 DevOps、微服务以及全功能产品团队的培训、设计、实践、落地以及经验推广。在 DevOps 和微服务领域有 4 年的实践和培训经验,在 GitChat 分享了多场微服务相关的话题,于 2017 年在上海 DevOpsDays 作为演讲者,分享了话题“无服务器化微服务的持续交付”。在深圳的全球运维峰会(GOPS)上 分享了话题,分享了“DevOps可视化在电信企业的应用” 。

课程内容

第01课:聊聊不一样的 DevOps(上)

随着 DevOps 的盛行,我和越来越多的人聊到 DevOps,也听到了很多人在讲 DevOps,我发现很多人讨论的背后,对 DevOps 所指并不是同一件事情,所以往往不欢而散。

于是我开始从头整理 DevOps 的所有有关材料,并把他们陆续放在了简书上,形成了“DevOps 前世今生”这个系列,这个系列还在不断补充新的资料。随着知识和实践的不断增长,我也渐渐的对 DevOps 有了更进一步的认识。

在过去的四年中,我作为 DevOps 的咨询师参与了国内外很多企业的 DevOps 转型以及技术实施咨询,也在不同的社区活动和运维大会中分享了自己在 DevOps 上的实践、理解和观点。

含义越来越丰富的 DevOps

DevOps 至今都缺乏一个准确和清晰的定义,这是一件好事,也同样是一件坏事。虽然 Patrick Debios(DavOpsDays 的发起人和运动领袖 )曾经在自己的博客里一再提到自己对 DevOps 的“正确认识”,但社区似乎不以为然。

对于 DevOps 来说,这是一件好事,也是一件坏事。

好事是没有人可以垄断 DevOps 定义的话语权,因此每个人都自己可以参与到这一运动中去,不断为其增加新的概念、新的实践和新的工具,这会让这个社区不断的繁荣,而不会由某一厂商垄断而独大。

而坏事则是对于 DevOps 的跟随者——那些早期没有参与进来的人——需要学习和理解的内容的广度和深度也越来越大,随着开源社区和企业之间的不断“贡献”,各种打着 DevOps 标签的概念、方法论、服务和产品也层出不穷。

于是有了以下这幅众所周知的“盲人摸 DevOps”图:

从图中我们可以看出,DevOps 是一系列概念的总和,任何一个单一方面只是 DevOps 的一个部分,但任何一个方面都不是 DevOps 的整体。随着 DevOps 这个概念的不断膨胀,人们就更难理解 DevOps 了。

你理解的 DevOps 是指的什么

在接触了各类客户和社区之后,我开始尝试理解每个人谈到 DevOps 的时候,背后的目标和动机是什么。渐渐的,我把我所接触到的 DevOps 理解分成如下四类,分别是:

  • DevOps 是一组技术实践
  • DevOps 是一个岗位角色
  • DevOps 是一种工作方式
  • DevOps 是一种组织结构

那么,分别来谈谈这四类 DevOps;本篇来谈谈 DevOps 分别被理解为技术实践和岗位角色;下篇再谈 DevOps 作为 工作方式和组织结构。

当 DevOps 是一组技术/实践

在工程师文化的组织里,对先进技术的渴望是最常见的动机,可以促进工程师用更有效率,更优雅的方式解决问题,而对于非工程师文化的组织,新的技术往往是提升其 KPI 的工具。而仅仅追求 KPI 却不追求本质,则是很多组织转型失败的原因,以下是我听到 DevOps 的时候,经常能触及的技术类话题:

  • 高频部署
  • 持续交付
  • 云计算/虚拟化技术
  • 基础设施即代码
  • Docker
  • 自动化运维
高频部署

在 2016 年 5 月中旬的时候,我有机会和某跨国著名银行的 IT 某部门负责人交流 DevOps,对方声称自己是行业里的 DevOps 翘楚,并很自豪的告诉我,他们某应用部署频率每天已经超过100次,这让我很疑惑,于是我问了以下几个问题:

  • 为什么你们需要这么频繁的部署?
  • 有这么频繁变动的业务需求吗?
  • 在这么多次部署里,是发布业务价值的部署更多,还是修复问题的部署更多?

对方并没有直接回答我的问题,而是含糊其词告诉我这是秘密,我看他不好意思回答,也就作罢了。

这让我引发了一个重要的警示:指标导向的 DevOps 转型往往是一种 DevOps 的反模式,它会忽略和掩盖真正的问题,而使问题表面上得到了改进。

指标的背后是对问题的度量,如果我们度量错了东西,那么方向就有可能是错误的。在上面的例子中,如果部署频率一直很高,不一定是个好现象:不是业务的变动很频繁,就是技术的变动很频繁,但如果二者都频繁,我们应该优先变动价值较高的:有可能新的业务尝试让我们从市场上获得了更多的关注,也有可能新的技术提升了生产率。但无论是哪一种,部署频率应该是一个由多到少不断循环的过程。这表明系统在走向成熟和稳定的同时,能够及时响应变化,无论是对技术还是对业务,都需要一个认识的时间。但,如果对为什么变更这么频繁缺乏足够深入的认识的话,问题的严重程度可见一斑。

此外,DevOps 绝不是为了提升部署频率而牺牲了软件质量和业务价值,甚至是安全措施。换句话说,DevOps 不是一种平衡和妥协,它是一种改进。有时候,为了换取更多更快的部署,则会减少一些必要的质量保证措施和安全措施,但这是对 DevOps 的误解,DevOps 是一种改进,改进就意味着以价值兑现为最高原则所度量的相关指标是不能有所下降的。

持续交付

当碰到 DevOps 的时候,我们必然会听到“DevOps 流水线”。这是从持续交付的“持续交付流水线”中演化而来的概念,只是在 DevOps 的场景下,持续交付中的持续部署和发布,被看做是和 DevOps 相关的概念。

持续交付是 DevOps 中非常重要的实践,在 DevOps 概念诞生之前,就有了持续交付的思想,只是持续交付这个重量级话题直到第二届欧洲的 DevOpsDays 才被更多人知道。

持续交付本身也通过技术实践解决了 DevOps 最开始所面临的 Dev 和 Ops 的部门墙的问题。不夸张的说,如果 Patrick Debois 早一点读到持续交付中运维的话题,说不定就没有 DevOps 了。

但是,由于 DevOps 所涵盖的话题已经超出了持续交付本身。因此,持续交付只能算是 DevOps 的其中一个实践。

我把持续交付列为 DevOps 的核心实践之一,因为如果你没有实践持续交付,那么根本不能称之为 DevOps,但是如果你完整实践了持续交付,那么你离完整的 DevOps 技术实践也不远了。

云计算/虚拟化技术

随着分布式应用在互联网时代的井喷式发展,基础设施的管理成为了分布式应用的新瓶颈,在基础设施集中式管理的时代,大型应用只能运行在昂贵的小型机上,只有微软、SAP、IBM、Oracle 和 EMC 这样的企业才有能力提供相应的产品完成这样复杂度很高的架构。因此企业需要单独的运维部门(Ops)来管理这些软件和设备。

而随着虚拟技术和云计算的兴起,企业的基础设施管理工作往往变得很简单。VMWare 这样的虚拟技术企业和 AWS 这样的云计算供应商提供了更加成熟和稳定的产品,大大的节约了企业机房管理的开支。

而传统意义上 Ops 不再需要进出机房,只需要通过远程桌面的方式就可以使用各种 SDK 开发工具去完成过去很多只有在机房才能做到的任务。

但是,即使采用了先进的虚拟化技术提升了 Ops 的工作效率,减轻了 Ops 的痛苦,但仍没有解决 Dev 和 Ops 之间的“部门墙” —— 开发团队和维护团队仍然各自为政,通过责任判定,而不是合作共赢来促进软件交付的高效运行。

基础设施即代码

尽管有了云计算和虚拟化技术,传统思维仍然限制住了资源的管理。随着设备和网络的持续增多,加之更加复杂的应用部署和初始化,基础设施的管理成为了一个十分尖锐的问题,当复杂度上升一个量级,就需要专业的管理工具来管理这类问题,于是 Puppet 这样的框架顺势而出。以至于在 《DevOps Handbook》中,合著者之一的 John Willis 在理解了 PuppetLab 的创始人 Luke Kanies 关于配置管理的核心思想之后,才诞生了 DevOps 的最初想法。

基础设施即代码利用了编程语言和虚拟化工具 API 的无缝连接达到这一目的,并且通过高效的版本和配置管理使其井井有条。

这种技术在很大程度上把基础设施的管理当做其问题域,采用正确的面向对象抽象,让开发人员和运维人员能够理解并设计出更加稳定和灵活的基础设施,并大大降低基础设施变更的风险,这不光提升了运维知识的透明度,并使基础设施变更具备幂等性。

因此,它在一定程度上解决了不同环境(开发、测试、生产)之间的不一致问题,也让开发人员能够学习到 Ops 领域的知识并用软件开发的优秀思想解决运维领域的问题。

基础设施即代码除了工具以外,更是一种 Dev 和 Ops 之间相互沟通的媒介,能够让开发人员和运维人员相互理解。所以,基础设施即代码毫无疑问的是 DevOps 的核心实践之一。

Docker

从某种意义上说,Docker 是含着 DevOps 的金钥匙出生的,它诞生的第一天就带着 DevOps 的基因:更简单的解决了基础设施即代码和虚拟化在实践中的问题,进一步提升了自动化能力以提升效率,并且对开发人员和运维人员都十分友好。

Docker 一定程度上简化了基础设施的初始化和状态管理问题,通过镜像和运行时容器封装了应用运行时的复杂度,并通过容器的编排使轻量级的分布式架构更加经济快捷,而且很多地方都会以是否采用 Docker 来评判是否采用了 DevOps 的相关技术。

但是,Docker 和任何一种工具一样,都不是“黄金锤”。当用错了场景,使用 Docker 可能是一场灾难。我曾经参与了一个整体基础设施迁移的项目,工具就是采用 Docker,最初的目的是因为 Docker 镜像的移植性好,但是客户为了能让 Docker 镜像的业务场景更加通用和可定制化,又分别采用了另外两种工具对其部署场景进行封装,写出了第三种工具。然而,由于这个工具并没有很好的分离其业务关注点和技术关注点,导致这个工具使用更加繁琐,使得原本为了提升生产效率的 Docker 反而成为了阻碍效率的绊脚石。

自动化运维

有很多对 DevOps 望文生义或有些技术了解的运维工程师认为提高了自动化运维的水平,就达到了 DevOps,虽然自动化在 DevOps 里扮演着很重要的一部分。

所以,做到自动化运维,并不代表你就正在实践 DevOps,但除了运维自动化,还应该有开发的自动化,并且让自动化成为团队的基因之一。很可能你仅仅提升了运维的效率,但并没有从全局的角度提升开发和运维之间的效率。因此,仅仅有自动化运维,还不足以称之为 DevOps。除了运维自动化,还应该有开发的自动化,并且让自动化成为团队的基因之一。

关于 “DevOps 技术”

以上列举了很多所谓 “DevOps 技术”,是从技术的角度来认识 DevOps。然而,任何工具都是为其组织结构服务的,当脱离了组织结构的时候,DevOps 的技术转型会带来很多痛点,就像康威定理说的:

设计系统的组织,其产生的设计等同于组织之内、组织之间的沟通结构。

由于 DevOps 工具可能会引发组织结构的变动,单纯对提升技术工具,带来的结果会有以下两种:

  • 对于执行力强的大型组织来说,组织会要求工具做出改变以适应组织的结构。
  • 对于执行力弱的小型组织来说,组织会根据工具的要求改变以适应工具的结构。

无论以上哪一种,单纯引入工具都无法有意识的解决 DevOps 转型所带来的这种痛点,此外,不探索 DevOps 真正的问题,以及技术背后的目的和最佳实践,往往会使导致对 DevOps 的片面了解而适得其反。

从 DevOps 运动发展的历史上来看,DevOps 相关技术是解决 DevOps 相关问题的结果,而非动起因。因此,对于 DevOps 的理解如果本末倒置,则很有可能起到反作用。

此外,我相信所有第一线的工程师都很聪明,并且随着技术的发展,工具和平台的使用会越来越容易。但是,能够跳出自己的责任区,从全局的角度观察并解决问题的能力则是很多工程师所欠缺的。

当 DevOps 是一个岗位角色

随着 DevOps 的流行,企业也开始对 DevOps 有所期望,希望通过招聘和培训来提升自己的 DevOps 能力或者具备 DevOps 的技能。于是设置了一些称之为“DevOps 工程师”的岗位和角色。通过对这些招聘需求的描述,以及客户对 DevOps 诉求,我整理了四个对“DevOps 工程师”的认识:

  • 作为 Dev 的 Ops(会开发技能的运维工程师)
  • 作为 Ops 的 Dev(会运维技能的开发工程师)
  • 基础设施开发工程师
  • 全栈工程师
作为 Dev 的 Ops

有很多人也会认为,只要让开发工程师掌握运维技能,运维工程师掌握开发技能,就做到了 DevOps,这招来了很多运维工程师的反感。我采访过一些运维工程师,当初他们就是不喜欢也不想写代码,才来做运维方向。

其中有一个动机是在于基础设施技术的进步和架构的稳定,这会让高管有一种错觉,认为运维团队一定程度上是浪费,因此,为了“物尽其用”,讲运维工程师去写业务代码,并用“DevOps”作为对这种措施这一合理化的幌子。

这种想法的天真在于忽视了开发和运维的专业性和差异性。虽然我不否认技术的发展对二者来说难度和门槛在不断降低,而且掌握一定开发技能的运维工程师前景更宽,但是强人所难并不会让事情变好。

作为 Ops 的 Dev

同样的误解也会发生在开发工程师身上,对于开发工程师来说,其实难度并没有增加,无非是把 Ops 的工作当做需要完成的需求而已,甚至很多开发工程师自己也这么认为。

然而软件开发和软件维护是相互关联但是各自独立的专业领域。DevOps 并不是要消除任何一方,而是要通过更加深入的合作成为彼此工作的润滑剂而非绊脚石。

对于开发工程师来说,掌握跟多的技能绝对是一件好事,但也不要低估运维的专业性和难度。

基础设施开发工程师

由于有了上面介绍的虚拟化和基础设施即代码这样的技术,“通过 Dev 的方式完成 Ops 的工作,就是 DevOps”也很自然的成为了很多 Ops 对 DevOps 的认识。他们往往有一个新的称谓:基础设施开发者 (Infrastructure Developer),指的是通过工具和配置文件,利用现有的云计算和虚拟化平台资源,为应用程序构建基础设施。

在一些企业里,基础设施开发工程师都会肩负着企业 DevOps 的重任。

全栈工程师

当然绝对不排除有些工程师是既懂开发也懂运维的“复合型人才”,但这样的人才所花费的货币成本和时间成本也十分高昂:一方面是寻找和雇用这样的人所花费的成本。另一方面是培养这这类人才的成本。

但是,仅仅认为有了这样的人才就具备 DevOps 的能力也并不现实。首先,DevOps 是一个团队属性,而不是个人属性。一个人的力量相较于一个团队来说,还是很有限。其次,招聘这样的人还是为了胜任纷繁多变的工作。因此,我有时候会戏称全栈工程师为“全干工程师”,听起来很厉害,但工作境遇并不见的很好。他们往往会身兼多职而变得异常忙碌,成为团队的“瓶颈”。这并没有让效率提升,反而是一种下降。这并没有改善工作情况。

你可能只需要一个外部 DevOps 教练

不要以为缺乏 DevOps 人才就无法实现 DevOps 了,正确了认识 DevOps 之后,DevOps 就没那么困难。

软件开发和软件运维,是两类不同但联系很密切的事务,在过去很长的时间里,他们都是分别在不同的部门中工作的。但随着企业的互联网转型,这种专业性和责任的不同从甲乙双方的矛盾变成了企业内部的矛盾。这是企业在互联网转型过程中的必经阶段。而如何平滑的过渡,则是 DevOps 成败关键所在,你所需要不光是工程人才,你还需要新型的管理人才或者外部顾问来推动这项改进。

一般来说,DevOps 的变革一定会调整组织的制度和做事方式,而制度层面的改变不是企业内部能够很轻易做到的。由于“不求有功,但求无过”的心态普遍存在,因此越是大型的组织,所面临的组织僵化会越严重。因此,从组织外部引入“晃动器”才可以避免组织的卡壳,例如:聘用有 DevOps 经验的高管,或者是专业的 DevOps 教练。

由于 DevOps 的定义很广泛,DevOps 转型也不会千篇一律。那么,如何识别好的 DevOps 方案呢?一般来说,我认为优秀的 DevOps 方案包括以下几点:

  • 能完整的 DevOps 的定义和理解(至少回答 DevOps 相关问题能自圆其说)
  • 有业务组织的分析(跳脱了组织谈技术很危险)
  • 有技术技能的分析(没有技术能力的提升都是口头转型)
  • 两者的分析有度量(没有度量就没有改进)
  • 方案落地里有技术和组织改进两部分(工具和实践相辅相成,两部分缺一不可)

未完待续

本篇我们讨论了常见的两种 DevOps 理解,分别是:

  • DevOps 是一组技术实践
  • DevOps 是一个岗位角色

下篇我们将讨论 DevOps 的另外两种理解,谢谢。

第02课:聊聊不一样的 DevOps(下)

在上一篇中聊到了 DevOps 两种常见的理解:

  • DevOps 是一组技术实践
  • DevOps 是一个岗位角色

在这一篇中来聊聊 DevOps 另外两种常见的理解:

  • DevOps 是一种工作方式
  • DevOps 是一种组织结构

DevOps 是一种工作方式

在我看来,这算是最贴近 DevOps 的目标的定义,但是在理解和实践上也是问题百出,片面的理解和机械的模仿都会造成 DevOps 之痛。对于 DevOps 的工作方式,有以下四个常见的理解:

  • 用 Dev 的方法做 Ops 的事
  • 换了名字的 Ops 团队
  • 一个有 Ops 的 Dev 团队
  • 一个 Dev 和 Ops 合作的团队

用 Dev 的方式做 Ops 的事

当你采用了 “基础设施即代码”,或者你有了“基础设施开发工程师”的时候,很自然的会想“我已经做到 DevOps 了”。然而,如果你并没有注意我在上一篇文章中描述的几种情况,那么你可能得到的只是下面所述的“换了名字的 Ops 团队”。

换了名字的 Ops 团队

这其实是很多公司的做法,认为 DevOps 所做的事情只是技术的更新,并无其它。

在 2016 年 8 月份我在悉尼的一个 DevOps 项目上做转型咨询,客户的应用系统是基于 AWS 构建的,并且客户始终认为 DevOps 工程师就是前文所述的基础设施开发团队,只是工作的内容全都在 AWS 上面,并没有什么变化,而且给这个团队一个很高大上的名字:Enablers。

然而,这个团队仅仅用新工具是清偿了之前运维工程师留下的技术债,并没有帮助开发团队、测试团队甚至是业务团队从自己的角度提供帮助来提升价值的流动速度和工作效率。

不光如此,因为这个团队掌握了关键的基础设施资源,成为了所有团队前进的阻力,导致其它部门有更多积压的工作并需要更多人的人来处理。由于出现了这样的结果,所以客户认为 “DevOps doesn't work in my orgnization”(DevOps 在我的组织里不好使)。

在 DevOps 转型的初期,尤其是 Ops 端驱动的 DevOps 转型,我们需要一个这样的团队从运维的角度提出统一的方案并提供统一的服务支持。但随着 DevOps 能力和成熟度的提升,这样一个实体团队而不是虚拟团队的存在则会成为 DevOps 继续发展的阻力。

一个有 Ops 的 Dev 团队

最天真的想法莫不如把两类工程师放在一个团队里,在同一个负责人的范围内消化 Dev 和 Ops 的问题。这样,Dev 和 Ops 就能统一目标,平衡矛盾和冲突,共同解决问题。

但实际上很少有企业能够走出这一步,一方面是 IT 部门的岗位设置和预算归属,另一方面是团队变更后的 KPI 考核。一件很小的举动就会牵扯更多的问题,使 DevOps 难以进行下去。此外,如果缺乏有效的 DevOps 实践或者外部教练的指引,那么使 Dev 和 Ops 的融合将是一个漫长的旅程。

在这种情况下,我建议采用 DevOps 项目制的方式来进行 DevOps 的体验:

  • 首先根据项目汇聚资源,在项目中预留 Ops 角色。
  • 从运维部门借调运维工程师到项目中。运维部门要提前安排好运维工作的交接,或者至少把日常性的运维任务的80%剥离出来,分配给现有团队,保证进入项目团队的运维工程师的工作不被打扰。
  • Ops 所在的部门绩效分为两块:一块为常规运维绩效(保证系统稳定性),另一块为 DevOps 项目绩效(保证开发顺利性),可以根据具体工作状况来设置这样的工作比率。
  • 保证运维团队人员能够有机会进入项目实践 DevOps ,同时要把项目开发中的运维痛点带回给运维团队处理。

在上述的悉尼 DevOps 转型项目里,我就成为加入到产品开发团队中的运维工程师。一方面解决开发团队痛点,一方面和 Enablers 团队沟通;一方面解决开发团队的痛点,另一方面获得相应的权限和知识,并把开发团队的反馈及时传达给 Enablers 团队。

一个 Dev 和 Ops 合作的团队

这就是 DevOps 所要达到的目标,它不是一个人的属性,而是一个团队的属性,它让利益相关方坐在一起解决问题,而不是相互甩锅。然而,由于“合作”的定义很简单,也很空泛,导致“合作”难以落地,以下是我认为“关键”的 DevOps 合作方式:

  • 共同进行架构设计
  • 共同进行技术决策
  • 持续交付流水线的建立
  • 共同 Pair 和 Review 代码和环境的配置
  • 共同参与回顾会议
  • 通过定期的内部 Session 增加相互的理解
  • 共同处理运维的问题

此外,还有很多其他的合作方式能够提升 DevOps 的效果,在此不一一列举,这里仅做参考。

DevOps 是一种组织文化

在著名在 Velocity 09 大会上,来自 Flicker 的著名演讲“10+ Deploys Per Day: Dev and Ops Cooperation”明确的指出工具和文化是他们成功的原因,而 John Willis 和 Damon Edwards 也在 2010 年 MoutainView 举办的 DevOpsDays 中重新强调了文化的重要性。

相对于可以看得见的工具,文化显得华而不实,也有人认为 DevOps 文化是一种“空谈陷阱”。

有一篇关于企业文化的文章写的非常好,这篇文章叫做“Culture is the Behavior You Reward and Punish”,翻译过来就是:文化就是你奖励和惩罚的行为,就是说对行为的惩罚和奖励构成了你的文化,对 DevOps 也一样。奖励符合 DevOps 的行为(而不仅仅是鼓励),惩罚不符合 DevOps 的行为。就形成了 DevOps 的文化。

而我所说的“建立 DevOps 的文化”则是建立一种规则约束,这种约束不但包含了 DevOps 的行为准则,而且包含了奖励和惩罚的机制,而这种规则约束不能变成一纸空文,更要切实执行下去,形成一种行为习惯。

习惯的力量则能够保证一种好的制度和实践顺利的延续下去,当然这种规则约束不是一成不变的,这些约束和规则也需要根据团队的发展不断的变化以适应新的状况。

然而,就如上文所说的,由于企业并不存在产生 DevOps 的基因(否则你早就有 DevOps 了),这些制度很难从内部产生,必须要的话,请引入外部资源,例如 DevOps 顾问或者 DevOps 教练。

我经常看到一些“KTV 式转型”,当人们在 KTV 里唱歌的时候,面对歌词字幕你总能唱出来,也能唱对。但如果没有歌词,人们往往就唱不出来了,这里的歌词字幕就相当于是转型顾问,当教练在的时候,每个人都知道怎么做,当教练不在,什么都没有了。

很多情况下,顾问和教练在短期内起到从“0到1”的转变,然而从“1-100”则不是一朝一夕就能实现的,文化的形成是一个长期的塑造过程,不是能够买来的,你需要有足够的耐心来不断的评估当前的状况并即刻。

以下是 DevOps 所鼓励的行为,尽管每个人都鼓励以下的行为,但实际效果则千差万别,往往抓住了形式而不是本质。

  • 信任
  • 沟通
  • 学习
  • 分享/共担
  • 不要指责

信任

你的团队里的 Dev 和 Ops 之间是相互信任的吗?你信任你的团队成员吗?如果回答是,那么你的团队成员信任你吗?信任是相互的,而且是高效团队成功的基石,获得信任很难,需要时间去建立,信任同样也很脆弱,很容易就会失去,你是否明确哪些行为对信任有帮助,而哪些行为会伤害信任?你能说出那些帮助构建信任和伤害信任的行为吗?你的团队都清楚吗?

当想到以上这些问题,你还信任你自己和你的团队吗?

这里有一个很重要的原理:没有无条件的信任,信任是需要建立的。

《凤凰项目》中所介绍的构建信任的方式——把自己最脆弱的一面告诉大家。

很多人都觉得难以启齿,难以启齿的原因就是因为人们不愿意相信对方能够接纳这些不信任,而这么做恰恰能表明你对对方的信任,相信经历过一系列的措施之后,能改善当前的状况。

如果你觉得信任很难达成,那么这就是一个风险点,他会影响团队成员的行为和判断,造成不利的影响。所以,请多检查团队内部的信任情况,及时排除风险。

沟通

沟通是一个泛滥的话题,各种打着“高效沟通”的方法也层出不穷,但人们虽然都懂各种道理,也知道沟通的重要性,可沟通仍然被用作为“命令”的幌子,或用来实施语言暴力。

沟通的主要目的在于交换意见和看法,达成理解,沟通不仅仅是信息交流的通道,同样也是情绪宣泄的出口。我们在沟通中,有多少是发泄情绪占了很大的比重,但我们往往没有察觉,人们对表达自己的情绪是困难的,因此用各种各样的“道理”来掩盖真实的意图。如果团队成员的大脑被不良情绪占据,那么无论如何他在团队中都不会有很好的表现的。人们往往会用其它的方式宣泄自己的情绪,而缺乏正确的发泄渠道则会导致灾难。

你的团队里有没有比较沉默的人或者是不喜欢主动沟通的人?由于信任的逐渐缺失,有些人往往不再沟通,而这类不再沟通的人,往往是项目中的定时炸弹,而情绪积累到某一个点后,这个炸弹就会爆炸,造成很恶劣的影响。所以,尽早的介入并让每个人能够很顺畅的沟通,对降低情绪风险,尤为重要。

另外一个很重要的问题是:在沟通里,你是听的多?还是说的多?如果作为听者,你真正明白对方讲的是什么吗?如果作为说者,你在沟通之前,你是否有计划,是否明确沟通的目的,沟通后如何确认达到了沟通的目的?

如果不确认这些问题,那么沟通往往就是没有意义的闲聊。

学习

在英文里,学习是一个词——Learn,而在中文里“学习”是两个词,对应的英文分别是 Learn (学)和 Practice(习)。比如:Learn 就可以因为上下文的不同表示两种意思,一种是“经历过学习的过程,但不一定掌握”,另一种则是真正学会了。

当说到学习,往往想到的都是“输入”:看书(虽然买了也未必会看),看博客、看代码、看视频……然后练习,直到掌握。

然而,仅有输入是不够的,学习还应当有“输出”:形成博客、开源软件、演讲甚至是培训工作坊。有一句很著名的话叫做:“教是检验学习成果的唯一标准。”是不是真的掌握了,教一下别人,你会意识到“学习的错觉”。

在这里,我要强调一种重要的输入途径:从过往的经验教训中反思、总结,并形成团队的经验。很多事情过去了,无论成败,往往缺乏总结,这无法让团队成长,因为成败全凭“运气”。

学习的目的在于指导今后的实践,无论成败,都会降低未来失败的概率,多做“正确的事”,少做“错误的事”。

而只有学,没有习。只有输入,没有输出,或者只向外看,不向内看,都是片面的学习方式。我推荐的学习方式则是以输出作为学习目标,对知识和信息进行加工、思考、实践、提炼的过程。

毕竟,判断一个人的知识不再于他的输入,而在于他的输出。虽然你可以看到有人读了很多书,但有多少东西他记住了,只有通过他讲出来,才能够判断。

不要指责

很多问题棘手是因为人们不关注如何解决问题,而关注这个问题究竟是谁该负责,如果团队在责任归属的问题上花的时间很多,那么这就是一个指责文化的制度。在这种情况下,团队成员为了自保,会避免承担责任和解决问题。因此,很多事情没有进展,于是,整个组织沉浸在一种“不求有功,但求无过”的氛围下慢慢凝结,最后僵化至卡壳,引发问题。

我们常常听到“零容忍”,这往往是很漂亮的口号。但它往往指的是“发现问题掩盖问题”。以前人们都说,不怕有问题,就怕看不见问题。而现在很多问题的出现并不是“黑天鹅”事件,而是“灰犀牛”事件,恰恰是对问题的选择性失明导致了不可挽回的结果。

在实践 DevOps 的时候,需要先测试一下有多少“装睡的人”,因为“你永远叫不醒一个装睡的人”,没有解决不了的问题,只有不愿承担的责任。

分享/共担

Share 在英文里有两个意思,一个和别人分享,另一个是共同承担。在 DevOps 的上下文里二者兼有,一方面是作为学习的结果的产出,另一方面是避免组织陷入不愿承担责任的文化。对于团队作战来说,一个人犯错,不是他一个人的责任,而是集体的责任。

我们要相信没有不良的人,只有不良的制度。当出现了问题,从制度上而不是从个人的角度分析问题出现的原因,而且要能总结原因,形成新的制度。如果一个问题不在制度上去避免,那么错误还会再犯。

如果什么都是 DevOps,那么 DevOps 实际上什么也不是

如果把所有 DevOps 相关的内容加总就能得到 DevOps,那和没有定义 DevOps 一样。如果我们没办法确定“什么不是 DevOps”,那同理我们也很难定义 DevOps 是什么。

我试图从这两篇文章中对 DevOps 的理解里,提取出一些 DevOps 的必要元素来构成 DevOps 的完整实践。这些元素缺一不可,但单独拿出来又不能构成完整 DevOps 的概念。这样既可以保证对 DevOps 的完整理解,又避免 DevOps 概念过大难以下手。

根据我自己的实践,我认为 DevOps 包括以下几点原则:

  • DevOps 有一个明确的目标:通过充分的合作解决由于责任模糊而相互推诿的问题(没有 DevOps 痛点的团队自然也没有 DevOps 的动力)。
  • DevOps 是一个团队属性而不是个人属性,这个团队需要处理开发和维护任务(有单一任务都不算是 DevOps 团队,因为没有合作解决 DevOps 痛点的动机)。
  • DevOps 是一种团队改进,对于团队的表现有明确目标和度量(没有度量的改进就是耍流氓)。
  • DevOps 是一种团队工作方式和文化,它包括了一系列促进 Dev 和 Ops 合作的具体技术和实践以达到上述目标(DevOps 也不是缺乏技术的理论空谈)。

因此,以下的描述都不是 DevOps:

  • DevOps 不是一个职务或者角色,因为 DevOps 是团队属性。
  • 不存在“DevOps 团队”,只存在“以 DevOps 方式工作的团队”。

根据这个对 DevOps 的认识,并结合我过去三年的 DevOps 的实践和咨询经历,我在 GitChat 设计了这门“DevOps 转型实践”达人课的第一部分,希望能给正在做 DevOps 的你一些参考,希望能够助你在 DevOps 的实践过程中更加顺利。

课程介绍

“DevOps 转型实战”的课程如下:

  • 01:写在 DevOps 转型之前
  • 02:分析组织工作流上下文
  • 03:分析技术能力上下文
  • 04:选择 DevOps 执行模式和转型策略
  • 05:采用 DevOps 看板和 DevOps 故事
  • 06:开发侧主导的 DevOps 转型
  • 07:运维侧主导的 DevOps 转型
  • 08:打造自改进的 DevOps 团队

此外,我会在我 GitChat 的读者圈里回答各种 DevOps 转型中出现的问题。

第03课:写在 DevOps 转型之前
第04课:分析组织工作流上下文
第05课:分析技术能力上下文
第06课:确定 DevOps 执行模式和转型策略
第07课:DevOps 看板和 DevOps 故事
第08课:开发驱动的 DevOps 转型注意事项
第09课:运维驱动的 DevOps 转型注意事项
第10课:打造自改进的 DevOps 团队

阅读全文: http://gitbook.cn/gitchat/column/5a79594e74fabe0f179f3e8b

DevOps 转型实践相关推荐

  1. 云效助力新金融DevOps转型——南京银行实践之路

    在2018云栖大会南京峰会企业研发云专场,由南京银行研发管理负责人吴攀带来了"云效助力新金融DevOps转型--南京银行实践之路"的主题分享.首先对南京银行的研发规模与成长做了介绍 ...

  2. DevOps转型陷阱与核心实践指南

    本文转自微信号EAWorld.扫描下方二维码,关注成功后,回复"普元方法+",将会获得热门课堂免费学习机会! 2010年,我曾在IBM供职,开始参与DevOps相关的产品研发与实施 ...

  3. 华为精益敏捷专家:DevOps转型中的那些坑

    陈军–原腾讯高级项目经理.华为精益敏捷专家 DevOps是现在非常流行的一个词,很多人都在提DevOps,在往那个方向去转,但转的时候坑特别多. 现实是很理想的,大家都觉得做了DevOps之后就会非常 ...

  4. 广州线下活动 | 精益运维与 DevOps 最佳实践

    优维科技 DevOps 系列活动第四期开始啦! 本期活动由优维科技和又拍云联合举办,邀请了 王喜春 @唯品会.陈琛 @魅族.彭鲤航 @优维科技.邵海杨 @又拍云 四位业界大牛,为你讲述精益运维与 De ...

  5. 单点突破,击穿阈值,DevOps转型你需要这样做

    在上篇文章里,我提到了如何通过对价值流进行分析.拆解关键要素指标,并通过缩减处理时间PT.降低前置时间LT.提高完成&准确的百分比(C&A%),实现企业研发效能10倍速提升.大家点击回 ...

  6. 移动研发 DevOps 落地实践

    传统的研发模式已经无法适应企业在数字化转型中快速迭代以及研发协同的要求,建设符合业务场景特性和有效支撑高并发.持续迭代集成需求的研发效能实践迫在眉睫. 本文将围绕支付宝如何随着移动市场的高速发展,逐步 ...

  7. 实战:阿里巴巴 DevOps 转型后的运维平台建设

    摘要: 阿里巴巴DevOps转型之后,运维平台是如何建设的?阿里巴巴高级技术专家陈喻结合运维自身的理解,业务场景的分析和业界方法论的一些思考,得出来一些最佳实践分享给大家. 前言 "我是这个 ...

  8. 测试私有方法 重构_一个全栈工程师重构之路:中小公司 DevOps 落地实践

    为了这篇文章,我前后写了将近十篇文章铺垫,才将这篇整体重构思想引出. 背景 先说下背景,我们是一家小公司,虽然打着做产品的旗帜,但是每个客户都有大量的个性化功能,这里指各个客户的java端.Andro ...

  9. 你的企业离DevOps转型成功,就差这“七步法”路线图

    从2009年诞生,DevOps已经悄然走过了10多个年头.Gartner在技术热门度曲线报告"Hype Cycle for I&O Automation, 2019"中指出 ...

最新文章

  1. 用“脸”打卡,抬头就能签到!
  2. 编译问题二 /snmplib/tools.c:920 undefined reference to `clock_gettime' 问题解决
  3. python圆的半径计算圆的周长列表_python计算圆周长、面积、球体体积并画出圆
  4. C/C++ linux 分享库源码网站收藏
  5. Linux编译程序时加-I指定头文件位置
  6. Win 10 Revit 2019 安装过程,亲自踩的一遍坑,有你想要的细节
  7. java数据成员_Java基础教程之对象的方法与数据成员
  8. ThinkPHP的介绍和安装
  9. Linux sed 批量替换多个文件中的字符串【转载】
  10. 办公神器,专治低效——特色功能软件工具
  11. 锌离子荧光探针Zinquin 乙酯
  12. 电脑端10大图片处理类神器
  13. 运用MATLAB批量读取excel表格
  14. IBM WebShere Portal主题与皮肤开发
  15. Java debugger模式调试
  16. java多线程高级:JUC
  17. 接口请求中post与put的区别
  18. 专线网络故障排查本地网络故障排查
  19. 流量监控软件轻松处理异常流量
  20. 5G+V2X自动驾驶新趋势

热门文章

  1. JaCoCo计算代码覆盖率原理
  2. 外包三年准备跳槽了!
  3. 如何向天翼云服务器上传文件,天翼云储存上传文件的方法
  4. 工欲善其事,必先利其器之—使用ImageMagick处理图片
  5. 淘宝图片怎么编辑处理?淘宝图片处理用什么软件?
  6. 编程n的阶乘使用while语句_谷歌工程师新作,东北话编程
  7. 4.一脚踹进ViT——ViT再审视与DeiT的实现
  8. pom里配置阿里云仓库
  9. 计算机毕业设计SSM电商直播订单管理系统【附源码数据库】
  10. 总结几个查找论文网址