DevOps是Development和Operations的组合词,也就是开发和运维。
对于DevOps,不同的团队可能有不同的定义,一个团队在不同时期对它的定义也可能会不同。
在看了很多博客以后,我看到了很多技术大牛对DevOps的定义,其中就有一些共性和特性。为了备考阿里云DevOps助理工程师,我打算写下这篇文章,也写一写我对DevOps的理解。
- 一些互联网大厂对“what is DevOps”的解读
- 我对DevOps的理解
1. 一些互联网大厂对“what is DevOps”的解读
在百度上搜索:“what is DevOps”,你就会看到一些大厂对DevOps的解读,在读了几篇文章之后,你会发现,在讲DevOps时,怎么都离不开它的发展历程。
DevOps的前生今世
说到发展历程,就不得不提到 Patrick Debois,他就是DevOps 的“祖师爷”。
2007 年,Patrick Debois参与了比利时一个政府下属部门的大型数据中心迁移的项目。在这个项目中,他负责测试和验证工作。所以他不光要和开发团队(Dev)一起工作,也要和运维团队(Ops)一起工作。他第一天在开发团队跟随敏捷的节奏,第二天又要以传统的方式像消防队员那样维护这些系统,这种在两种工作氛围的切换令他十分沮丧。
Patrick Debois意识到开发团队和运维团队的工作方式和思维方式有巨大的差异:开发团队和运维团队生活在两个不同的世界,而彼此又坚守着各自的利益,所以在这两者之间工作到处都是冲突。
在 2008 Agile Conference 大会上,Patrick 遇到了 Andrew,两个人一拍即合,开始琢磨如何改变这种 Dev 和 Ops 水火不容的现状。
2009 年 10 月,Patrick 通过 Twitter 召集开发工程师和运维工程师在比利时根特市举办了首届“DevOpsDays”大会,开始大规模讨论 Dev 和 Ops 的协作话题。后来为了便于传播“DevOpsDays”被缩写为“DevOps”。
在 2009 年以后,DevOps 开始火遍全球。
2010 年,The Agile Admin 博客发表文章《What is DevOps》 ,详细阐述了 DevOps 的定义,包括一系列价值观、原则、方法、实践以及对应的工具。
这篇文章的链接如下:
https://theagileadmin.com/what-is-devops/
但阿里巴巴资深技术专家陈鑫认为,业界真正开始大规模落地 DevOps,还是不能离开容器化技术的功劳。
“Docker”起到了决定性作用,通过编写Dockerfile,第一次可以让开发者轻松定义软件运行环境,并且能通过 CI/CD 标准化流程去交付它。不过这么多容器运维起来仍然麻烦,于是 google 在 2014 年开源“k8s”(Kubernetes);2015 年 CNCF(Cloud Native Computing Foundation 云原生计算基金会)成立,正式将“k8s”作为核心,建立了一个巨大的生态系统。有了“docker”和“k8s”技术上助力,加速了开发和运维角色的融合,于是 DevOps 不再是空中楼阁。
所以什么是DevOps?
文章《What is DevOps》里是这么说的:
DevOps is the practice of operations and development engineers participating together in the entire service lifecycle, from design through the development process to production support.
IBM的社区里有篇文章是这么解释的:
DevOps—a collaborative approach across business, development, and operation stakeholders to deliver and run reliable software as soon as possible.
软件开发商Atlassian是这样定义的:
DevOps is a set of practices that works to automate and integrate the processes between software development and IT teams, so they can build, test, and release software faster and more reliably.
阿里云Devops入门手册里是这么写的:
“DevOps”这个词是 development 和 operations 这两个词的组合。它是一种促进开发和运维团队之间的协作,以自动化和可重复的方式更快地将代码部署到生产中的文化。简而言之, DevOps 可以定义为通过更好的沟通和协作,使开发和运维保持一致。
总之,还是那句话:
对于DevOps,不同的团队可能有不同的定义,一个团队在不同时期对它的定义也可能会不同。
看了那么多关于DevOps的介绍,我也对DevOps有了一些见解,如有写的不好的地方,还请大家批评指正。
2. 我对DevOps的理解
一种集开发、测试、运维一体的开发模式
以下是有关 DevOps生命周期的简要信息:
- 开发
在此阶段,整个开发过程分为小的开发周期。这有利于 DevOps 团队加快软件开发和交付过程。 - 测试
QA 团队使用 Selenium 等自动化测试工具来识别和修复新代码中的错误。 - 集成
在此阶段,新功能与主分支代码集成,并进行测试。只有持续集成和测试才能实现持续交付。 - 部署
在此阶段,部署过程持续进行。它的执行方式是任何时候在代码中进行的任何更改都不应影响高流量网站的运行。 - 监测
在此阶段,运维团队将负责处理不合适的系统行为或生产中发现的错误。
这一阶段是首尾相连的,在产品上线后,开发人员也可以灵活地增加新功能,也就构成了一个循环。
开发人员对自己开发的项目负责
因为DevOps构成了一个循环,这样做带来的效果是,开发人员不光要对现在开发出的产品负责,除此之外,开发人员还需要在未来一段时间内一直对自己开发的产品负责。
这就像桥梁工程师,如果10年后,桥梁出现了质量问题,那么设计、建造这座桥梁的工程师也需要负相应的责任。这就有点像因果论,没有因,就没有果。