一个软件从零开始到最终交付,大概包括以下几个阶段:规划、编码、构建、测试、发布、部署和维护。
最初,程序比较简单,工作量不大,程序员一个人可以完成所有阶段的工作。
随着软件项目的规模变得庞大。软件的复杂度不断攀升。一个人已经hold不住了,就开始出现了精细化分工。
除了软件开发工程师之外,又有了软件测试工程师,运维实施工程师。
过去普遍采用的软件交付基础模型,就是“瀑布(Waterfall)模型”。瀑布模型,基本特征,就是等一个阶段所有工作完成之后,再进入下一个阶段。适合条件比较理想化(用户需求非常明确、开发时间非常充足)的项目。大家按部就班,轮流执行自己的职责即可。
但是互联网软件项目,甲方客户的需求往往并不是固定且明确,会根据实际情况调整部分开发内容。同时用户给的开发时间周期却越来越少。在这个情况下,大家发现,笨重迟缓的瀑布式开发模型已经不合时宜了。
于是,软件开发团队引入了国外一个新的概念,那就是大名鼎鼎的——“敏捷开发”有两个词经常会伴随着DevOps出现,那就是CI和CD。CI是Continuous Integration(持续集成),而CD对应两个英文,Continuous Delivery(持续交付)或Continuous Deployment(持续部署)。
画个图说明可能更明白一点:
敏捷开发大幅提高了开发团队的工作效率,让版本的更新速度变得更快。
很多人可能会觉得,“更新版本的速度快了,风险不是更大了吗?”
其实,事实并非如此。
敏捷开发可以帮助更快地发现问题,产品被更快地交付到用户手中,团队可以更快地得到用户的反馈,从而进行更快地响应。而且,DevOps小步快跑的形式带来的版本变化是比较小的,风险会更小(如下图所示)。即使出现问题,修复起来也会相对容易一些。
这样最大限度的解决了用户需求描述和产品功能之间的信息不对称问题。众所周知的产品生命周期包括从产品需求确立到产品设计,开发,生产及售后。在传统模式下直到产品生产完成后,我们才能确认产品提供的服务或应用是否能真正的满足用户的需求,但是由于各种无法克服的原因,信息在传递的过程中会不断的被扭曲,被误解,导致最终产品和用户的期望总会有比较大的出入,如果需要重新改正的话,成本往往过于巨大导致用户不得不长时间忍受着不符合自己期望的产品。
在新的(Agile/DevOps)迭代开发持续交付的模式下,用户可以很早的就得到最终产品或服务的一部分进行实际体验,从而可以尽快的把发聩传递回需求管理团队和产品研发团队,这些极具价值的反馈信息将会成为随后产品交付功能的重要参考。随着一次又一次的不断迭代开发和交付,最终产品的将会变得越来越完美。【3】
为了更好的体现持续交付以及即时用户反馈两个重要的过程,我们可以用下面这张图来具体表现:
虽然敏捷开发大幅提升了软件开发的效率和版本更新的速度,但是它的效果仅限于开发环节。我们发现,运维那边,非常落后的手动部署上线,就成了新的瓶颈。
运维工程师,和开发工程师有着完全不同的思维逻辑。运维团队的座右铭,很简单,就是“稳定压倒一切”。运维的核心诉求,就是不出问题。
什么情况下最容易出问题?发生改变的时候最容易出问题。所以说,运维非常排斥“改变”。
于是乎,矛盾就在两者之间集中爆发了。
这个时候,神秘的主角DevOps,隆重登场了。
DevOps这个词,其实就是Development和Operations两个词的组合。
DevOps这个词来源于2009年在比利时根特市举办的首届DevOpsDays大会,为了在Twitter上更方便的传播,由DevOpsDays缩写为DevOps。
DevOps是一组过程、方法与系统的统称,用于促进开发、技术运营(运维)和质量保障(测试)部门之间的沟通、协作与整合。让团队从业务需求出发,向着同一个目标前进。
这个定位稍微有点抽象,但是并不难理解。反正它不是某一个特定软件、工具或平台的名字。
Agile/DevOps比较特别的地方是它是组织文化,流程以及工具的结合体。
想要将DevOps真正落地,首先第一点,是思维转变,DevOps并不仅仅是组织架构变革,更是企业文化和思想观念的变革。
除了洗脑之外,就是根据DevOps思想重新梳理全流程的规范和标准。
在思维和流程改变的同时,想要充分落地DevOps,当然离不开软件和平台的支持。
既然如此我们就需要把这三个要素一起标注出来,如下图所示:
目前支持DevOps的软件实在是太多了。限于篇幅,这里就不一一介绍了。话说回来,现在DevOps之所以被吹得天花乱坠,也有这些软件和平台的功劳,可以趁机好卖钱啊。
上述这些关键要素里面,技术(工具和平台)是最容易实现的,流程次之,思维转变反而最困难。
换言之,DevOps考验的不仅是一家企业的技术,更是管理水平和企业团队文化。
对比前面所说的瀑布式开发和敏捷开发,我们可以明显看出,DevOps贯穿了软件全生命周期。
结合下面这张图,更明显地说明了DevOps所处的位置,还有它的价值:
目前,DevOps国内处于高速增长的阶段。尤其是在大企业中,DevOps受到了广泛的欢迎。
要结合实际,立足于业务。不能为了敏捷而敏捷,为了devops而devops,那样就本末倒置了!
大多数的 IT 团队寻求改革并非来源于部门内部的自我革新,而是来源于业务部门的服务压力。正如同当年企业寻找 ERP,今天的企业将目光投向了 DevOps。但是 DevOps 并非像 ERP 那样可以直接部署的东西,而是一种由主流互联网巨头们所总结出来的的研发管理理念,是 Google、Netflix 等大型互联网公司实现快速迭代的秘诀。
深入理解了 DevOps 之后,你会发现:为了帮助研发团队在保持质量的前提下提高交付效率的方法都隶属于 DevOps 的范畴。
国内企业在实践 DevOps 过程中,普遍碰到了比较大的困难。主要是以下两个原因:
对于许多仍然在使用中心化的研发组织形式的团队来说,DevOps 的尝试无法立即获得肉眼可见的增长数据,思索与尝试带来的对团队的训练可能会是第一份收获。
参考Agile/DevOps成熟度指标模型图示,可以参考到国外企业的敏捷开发实践经验,同样是把转型的关键落实在以下四个方面。【3】
仅仅依托于工具恐怕无法保证DevOps的实施。我们推崇的是从流程,工具和组织文化以及人员素质四个方面整体考虑。【3】
DevOps对非互联网传统领域的企业而言是一件重要不紧急的事。
实践 DevOps 的原则中很重要的一点就是对工具的运用及依赖工具搭建合适企业自己独特性要求的自动化流程。但是目前市面上缺乏成熟的 DevOps 工具链,各个服务商的细分工具层出不穷,企业为了搭建整套 DevOps 流程,需要研究几十种工具,并选取其中的 6-8 种进行落地实践。非常依赖于管理者的项目经验,没有 DevOps 经验的团队起步将会比较困难。
参考资料:
1.DevOps到底是什么意思?https://zhuanlan.zhihu.com/p/91371659
2. 为什么DevOps很好,但却很难落地?(1)https://www.zhihu.com/question/55874411/answer/608052871
3.为什么DevOps很好,但却很难落地,大家对DevOps是怎么理解的?(2)
https://www.zhihu.com/question/55874411/answer/280407077
发布于 1 分钟前