1.4.3 DevOps
DevOps是最近另外一个非常流行的热词,但有时候它被人误解了。当转向云原生时,DevOps是一个需要掌握的重要概念。
DevOps的起源是非常奇特的。非常有意思的一点是,这个概念的创始人拒绝为其提供一个定义。这带来的结果就是很多人都使用它们自己的解释,当然,最终我们都在使用DevOps这个词来表示不同的东西。
注意 如果你有兴趣了解关于DevOps起源的更多信息,建议你观看Ken Mugrage的演讲,题目为“DevOps and DevOpsDays—Where it started, where it is, where it’s going”(http://mng.bz/Ooln)。
在所有关于DevOps的定义中,我发现Ken Mugrage(ThoughtWorks的首席技术专家)提出的定义特别有参考价值和有趣,他强调了DevOps的真正含义[15]。
[15] K. Mugrage, “My definition of DevOps”, http://mng.bz/AVox。
DevOps是一种文化,在这种文化中人们不分头衔或背景,共同想象、开发、部署和运维一个系统。
所以,DevOps是一种文化,它指的是为了一个共同的目标而协作。开发人员、测试人员、运维人员、安全专家以及其他人,无论头衔或背景,团结协作,将理念带入生产中并产生价值。
这意味着孤岛(silo)时代的结束,特性团队、QA团队和运维团队之间不再有壁垒。DevOps通常被认为是敏捷(agile)的自然延续,敏捷是DevOps的助推器,其概念是以小团队的形式频繁地向客户提供价值。简洁描述DevOps可引用亚马逊的CTO Werner Vogels在2006年发布的一句名言,当时DevOps这个词尚不存在:“如果你负责构建它的话,那就要负责运行它。”[16]
[16] J. Barr, “ACM Queue: Interview with Amazon’s Werner Vogels”, http://mng .bz/ZpqA。
定义了DevOps是什么之后,我们再简单看一下它不是什么。
■ DevOps并不意味着没有运维(NoOps)。一个常见的错误就是认为开发人员负责运维,运维人员的角色就消失了。但实际上,现在是一种合作的形式。团队将包含这两种角色,他们都会向团队贡献技能,从而将产品从最初的想法带到生产环境中。
■ DevOps并不是一种工具。像Docker、Ansible、Prometheus这样的工具通常被称为DevOps工具,但这是错误的。DevOps是一种文化。我们无法仅通过工具就将一个组织变成DevOps组织。换句话说,DevOps不是一个产品,但工具是重要的推动者。
■ DevOps不是自动化。即便自动化是DevOps的重要组成部分,但是这并不是DevOps的定义。DevOps指的是开发人员和运维人员协同工作,从最初的理念阶段直至生产环境,在这个过程中,可能会将一些过程自动化,比如持续交付。
■ DevOps不是一个角色。如果我们将DevOps视为一种文化和思维方式,那么DevOps是一个角色的说法就不攻自破了。然而,我们对DevOps工程师的需求却越来越多。通常情况下,当招聘人员寻找DevOps工程师的时候,他们寻找的是熟练掌握自动化工具、脚本和IT系统等技能的人。
■ DevOps不是一个团队。如果组织没有完全理解上文所述内容,他们很可能最终依然像以前那样保持孤岛状态,只会有一个变化:使用名为DevOps的孤岛取代原来的Ops孤岛,或者仅仅增加了一个DevOps孤岛而已。
在迈向云原生时,开发人员和运维人员的合作是最重要的。你可能已经注意到,在设计和构建云原生应用的时候,需要始终记住一点,那就是这些应用的部署地点是在云中。与运维人员协同工作,能够让开发人员设计和构建更高质量的产品。
虽然它被称为DevOps,但是我们要注意,这个定义不只涉及开发人员和运维人员。相反,它涉及所有人,无论他们的头衔或背景是什么。这意味着协作也会涉及其他角色,比如测试人员和安全专家(不过,我们并不需要DevSecOps、DevTestOps、DevSecTestOps或DevBizSecTestOps这样的新术语)。他们一起对整个产品的生命周期负责,是实现持续交付目标的关键。