DevOps是什么?
其实DevOps是两个英文字的缩写,Development(开发)和Operations(运维),同时DevOps其实是一个文化和概念,并不是特定指某一个做法。
这个其实和敏捷(Agile)是一个概念,敏捷也是一个文化和概念。敏捷基本核心概念是把周期缩短,通过快速开发,通过失误提前发现问题,提前做调整,也就是Fail Fast的概念。
摘抄自网络的一句话,非常有代表意义,敏捷执行下来能够带来的一个好处
所有系统都有bug,但是当bug被修复的速度超过客户能够发现和反馈的时候,就不算是bug。
对DevOps来说,DevOps的核心理念是:
减少开发和运维之间的隔阂,让很基于敏捷的开发能够快速的上线并且整个流程非常流畅。
DevOps是一个流畅的流程用白话一点来说,Dev代表着开发者,Ops代表着运维,代表开发结果上线。其实DevOps流行起来和敏捷开发有直接关系,我们常说敏捷对项目开发有多好,从项目管理来看如何执行,但是很少有人提到从工程师和实际开发的角度上面来说到底需要什么才能够支撑这种快速开发模式。
在比较严谨云环境发布过软件系统的人就知道,其实要更新一个软件版本,要经过很多流程,当遇到开发速度变快的时候,常常运维和开发可能脱节造成敏捷更本跑不动。所以,要跑好敏捷开发,没有DevOps基本上是不可能的。别说Ops了,如果你的Dev都被一些琐事浪费掉了时间(例如手动构建,手动测试等),那效率该有多低呢?
举个例子,在团队中开发的时候,常常遇到的事情是有些人commit 代码的时候忘记把一些程序上到版本控制中,结果另外一个工程师发现整个系统无法构建,而本来的开发者因为出差或者请假所以找不到的时候,那大家工作都会被耽误,这个还算小事,如果因此耽误到debug正式系统突发性问题的时候,麻烦就很大了。
结论,DevOps是技术上支撑敏捷开发可能性的环境。而要达到快,自动化是最为关键的地方,也是整个DevOps的核心。
DevOps主要关注的两个方面
关注组织架构
一致性理念,高效沟通,敏捷型、学习型团队
Ø统一思维、目标、技术栈及工具链
Ø协作机制和沟通机制
Ø响应变化的敏捷度
Ø软件架构设计能力
Ø快速试错,持续学习和创新
关注软件生命周期
高度自动化持续集成、持续部署和发布
Ø持续集成
Ø配置管理
Ø持续部署
Ø持续发布
DevOps中的构建和发布
DevOps中关于软件生命周期的东西,莫过于CI/CD(持续集成,持续发布),首先我们从DevOps这个单词说起。
DevOps中的Dev基本上有以下几个阶段
构建循环其实又对应到了几个不同的名词Continous Integration、Continous Delivery和Continous Deployment。
什么是Continuous Integration (CI)
作为开发人员,在开发的时候,最好是完成一个小的功能就要build一下,以校验有没有问题,越早发现问题,越容易处理。比较问题积累了一堆在解决的话,通常来说处理时间相对的短。当一个人开发的时候都有构建不成功的时候,合论一个团队多人开发呢。所以同样道理,越早将大家的代码一起构建,越早发现问题,越容易解决问题。CI讲的就是这个,如何越早和越快把大家的应用程序做构建,并执行测试以确保从最基本层面保证没有问题。
什么是Continuous Delivery(CD)
当程序构建没有问题,测试也没问题后,下一个步骤就是将其发布到线上。依照不同类型程序有不同上线方式,如果是微服务架构的,可能是发布docker容器,所以在这个阶段就是自动产生出对应的docker image 。如果是网站项目,可能就是发布tar包Java 程序,只需要将package提供给运维就可以快速上线了,所以CD主要指的是build package 的动作。
从整个阶段来说就是打包(build Package)
什么是Continouous Deployment(CD)
这个Continouous Deployment和Continous Delivery差异在于,Continous Delivery只产生出可用来上线的内容,传统上线或者更新还是要由人来操作的。Contiouous Deployment 则是连上线都自动化处理。比如以Docker image来说,就是自动把Docker image发布到容器服务里面,然后更改负载均衡的设置,让这个容器上线服务。到了这里,可以看到,整个过程变为,编译代码,测试代码,打包程序,发布程序的一条龙服务,开发完城后,可以一键完成上线。
希望大家对于DevOps 中的CI/CD有所了解。整个DevOps重点就是快,而要快就要能够重复执行,也就是达到自动化。