💯 作者: 俗世游子【谢先生】。 8年开发3年架构。专注于Java、云原生、大数据等领域技术。

💥 成就: 从CRUD入行,负责过亿级流量架构的设计和落地,解决了千万级数据治理问题。

📖 同名社区: ​51CTO​掘金​gitee​

前言

关于DevOps相关的东西其实一直都没有研究过,直到在2018年的面试过程中频频出现DevOps的相关内容,并且还因为DevOps错失了几个offer,我才意识到我该对DevOps下手了,不为别的,因为它让我明白了一个道理:

  • 机会都是留给有准备的人的!!!


DevOps介绍

首先,我们要特别说明下:DevOps不是某种特定的技术,并且其中涉及到的工具我们也可以用其他的来代替。DevOps是一组过程或者方法的统称。或者说它是一种方法论。

DevOps是Development和Operations的组合词,字面意思是开发&运维。虽然字面意思只涉及到开发团队和运维团队,但是实际上我们也要将QA测试团队考虑到其中

通过某种技术手段将最后部署的结果通知给测试团队,省去了人工沟通的成本


疑难杂症

DevOps的出现一定是为了解决在实际过程中整个交付流程中出现的问题,那么在此之前,我们先来了解一下最初软件系统的开发流程是怎么样的:

一套大型软件系统从设计到开发,到最终落地交付一定不是一个团队能够完成的,包括出现的产品、UI设计、基础架构、开发团队等多个部门间的协作;而在这里我们不扯太多,我们先来了解这三个核心团队间的工作:

  • 开发团队
  • 运维团队
  • 测试团队

其中,开发计划由开发团队从头开始设计和整体系统的构建,整个开发过程分为不同的阶段,然后对系统进行不断的迭代升级。而测试团队负责将开发团队开发的系统进行测试。

当测试提交准出文档后,由运维团队对整个系统进行部署上线,并且需要维护整个系统正常运行。

这看似相同的背后,各团队间的目标却是完全不一致的:

  • 开发团队负责将需求开发完成之后,进入到提测阶段,然后等待测试团队的反馈。
  • 测试团队向开发团队反馈需要修改的Bug和一些需要返工的任务
  • 开发团队收到测试团队的反馈之后对反馈问题进行修改再次提交测试
  • 测试准出之后,运维团队开始上线部署,接收真实用户的考验
  • 。。。

周而复始下,这样就意味着一个完整的项目需要一个更长的周期才可以开发出最终代码。

而随着整个开发周期的拉长,期间随着系统需求的不断的变动和人才的流失,导致出现了祖传代码。

而以上就是开发、运维和测试相爱相杀的根源,真实情况下,各种扯皮的原因都有


DevOps的解决方式

大环境快节奏下讲究效率,系统需求变更快,要软件更新迭代的速度也要求更快。而由于原始的方式各个团队之间的协作出现的一系列问题导致新需求上线时间成本很高,因而这也是大家推崇敏捷式开发的原因。

而简化开发、测试和运维团队之间的流程,将他们整合为一个团队,协同应对一套软件,从而缩短整个软件的开发周期。这就是整个DevOps敏捷开发的核心思想。

下面这个无穷大的符号,说明了DevOps是一个不断提高效率并且持续不断工作的过程

这里需要非常注意:引入敏捷式开发在前期并不一定会提高效率,甚至有可能出现效率降低。
要从全局的角度来看待这个问题。

深入浅出DevOps:DevOps核心思想_DevOps

DevOps管理软件的生命周期

了解到DevOps的核心思想之后,我们来聊一聊DevOps管理下软件系统的生命周期,从源头开始。

Plan

产品提供了具体的需求之后,开发团队会根据需求目标制定详细的开发计划和开发周期,并且这是最重要的一步

建议:
开发成员需要对需求进行深入的了解,并且及时和产品侧对齐需求的目的。
项目负责人需要和团队成员制定完善的开发计划和开发时间,和组内成员随时沟通开发进度。

Code

当开发计划和开发周期制定完成之后,那么接下来就是开发团队编写代码开发的过程,大家根据分配的任务各司其职。

包括数据库建模、基础架构的搭建、程序编写、单元测试等的输出

Build

软件代码开发完成之后,通常内部都会存在代码的版本控制工具,目前主流的就是Git

代码提交之后,需要通过构建工具将其打包成可执行的软件。像Java开发主流的都是*.jar这样的方式

而根据自己团队的选择可以使用Maven或者Gradle打包

Test

项目成功构建之后,提交测试代码,检查是否存在Bug或者错误。其中包括自测功能或者通过其他自动化工具来实现测试

Deploy

项目经过手动测试和自动测试之后,认定代码没有问题之后就会交给运维团队,准备部署前的准备工作

Operate

准备工作完成之后,运维团队将代码部署到生产环境中

Monitor

项目部署上线之后,接下来就是持续的监控产品的运行状态,记录产品运行中出现的问题和不足之处

Integrate

然后将监控阶段收到的反馈发送回Plan阶段,整体反复的流程就是DevOps的核心,即持续集成、持续部署。

常见工具集

以上就是整个DevOps管理下,整个软件的生命周期。而为了保证整体流程可以高效的完成,各个阶段都有比较常见的工具,如下图

深入浅出DevOps:DevOps核心思想_DevOps_02

以上只是比较常见的工具,甚至如果有其他工具用的顺手随时可以进行替换。
在随后我们会对该工具集分别进行介绍

总结

最后关于DevOps的出现,我们只需要记住一句话就好:

  • DevOps 强调的是高效组织团队之间如何通过自动化的工具协作和沟通来完成软件的生命周期管理,从而更快、更频繁地交付更稳定的软件