关于什么是 DevOps
最近听到业内一个很热门的词:DevOps。那么什么是 DevOps 呢?它仅仅是 Dev 和 Ops 两个岗位职责的拼接么?还是指的从代码研发的到发布的流程?还是一套符合敏捷思维的理论体系?你觉的会是什么呢?
其实业内也没有一个很明确的定义到底是什么是 DevOps,各有各的理解。这里采用林伟丹老师对 DevOps 给出的定义:DevOps 是敏捷软件开发与精益生产的思想演进,应用到 IT 端到端的价值链中,使得业务基于现代信息技术,通过文化、组织与技术变革而获取更大的成功。是不是很不容易理解呢,也记不住,对吧。简单来说就是以下三个基本信息:
DevOps 并没有取代敏捷或者精益,而是友好的吸收和并存
DevOps 的本质是不仅仅思考软件开发,而是整体价值链(是不是我们印象中的不一样呢?)
DevOps 的预期价值是更多的 IT 回报。
研发流程中对应的敏捷理论
在整体研发过程中(从商业论证到产品交付)中,不同的阶段会有对应的理论支撑,简单来说对应以下对应关系(大概的分类,不是十分精确,但整体上有助于我们理解)
敏捷(Agile):主要覆盖的是项目管理(部分)到可发布的增量产品(测试通过)的过程,通常说的 Scrum 只是敏捷的其中一种实践方式(以后有机会细讲)。
CI(持续集成 Continuous Integration):强调每次的代码交付都是可测试、快速反馈、高质量的集成,随时可发布。
CD(持续部署 Continuous Deployment):实现最终的业务价值交付,让用户可以直观的感受到成果。
ITSM(IT 服务管理):强调的是轻量级的 ITSM,主要用于管理生产事件和变更流程
Lean(精益管理):衍生自丰田生产方式的一种管理哲学,强调消除浪费。
TPS(丰田管理 Toyota Production System):提倡拉动式生产,努力做到 Just In Time(刚刚好的生产)
组织文化:DevOps 理念不仅仅是工具的使用,而是自上而下的文化变革,需要高层从上到下的支持与贯彻。
CICD 的区别
在上面的概念中,有简单的提到了 CI 和 CD 的区别,这里单独拎了来再讲讲,是因为这个是我们目前接触的频率非常高的词,有必要再统一下概念。其实这里还隐藏了一个 CD(Continuous Delivery):
CI(持续集成 Continuous Integration):关注开发每次提交的代码是否是正确的,强调的是代码层面的实现是否完成,是否是可工作的软件(集成测试通过,每次合并代码都不影响有的功能,需要高度的自动化测试介入,减少人工介入)。
CD(持续交付 Continuous Delivery):关注需求是否完全实现,是否可以给用户演示,强调的是可发布的产品增量(实现了具有价值的某些用户故事)
CD(持续部署 Continuous Deployment):最终发布生产的业务,让用户可以直接使用,强调业务最终产生了实际的价值并接受市场的反馈。