DevOps字面理解
DevOps(Development和Operations组合)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。一些国际组织对其定义如下:
DevOps强调对应用进行快速、小规模、可迭代的开发和部署,以更好地应对和满足客户的需求。它要求进行文化的转变,即将开发和运维只能作为一个合作的整体来看待,注重提高业务价值,旨在精简整个IT价值链。
从定义来看,其实devops就是为了让开发、运维和QA可以高效协作的流程。(可以把DevOps看作开发、技术运营和质量保障(QA)三者的交集)
DevOps是一套实践框架,包含了精益、敏捷的理念,各种持续集成和持续交付的职能,以及构建流水线的工具。它着眼于项目的实践,在实践中强调以业务价值来统一所有工作目标,这个目标是不同的团队打破原有的组织考核壁垒,进行合作和沟通的基础。它的核心思想是把所有的IT交付和运维服务团队统一起来,围绕一个统一的业务价值目标及业务交付范围加强沟通,通过频繁、快速地迭代交付和反馈,达到加快交付速度和提高交付质量的目的。
如果将IT系统提供的业务服务作为一个交付的产品来看,就存在一条在IT软件开发和交付领域等形成的流水线。为了建设这样一条流水线,需要弄清楚以下问题:
- 流水线的内容是什么?它的起点在哪?终点在哪?
- 如何搭建这条流水线?
- 如何管理这条流水线?
DevOps核心理念
DevOps的生命周期如下图所示:
在其生命周期中,包含以下几个核心理念:
实现组织目标
技术人员所做的软件系统是为业务部门的业务发展服务的,此是将所有IT交付团队统一起来的共同目标和原始驱动力。只要对比一下自己团队的KPI和业务目标的关系,就能发现传统的分隔式项目交付管理是多么官僚和浪费。所以,DevOps流水线包含开发、测试、部署和运维等整个项目过程,这些直接关系到最终的业务价值的实现,因此必须作为一个整体进行管理。
流程标准化
俗话说,无规矩不成方圆。在践行DevOps的时候也需要标准化的交付流程,且这个流程不是简单的管理规范,而是要用持续交付的流水线来取代冗长的开发运维流程,实现高效,高质。
除了开发测试交付部分,从运维的角度来看,在DevOps里强调的是轻量化的ITSM流程和架构,即根据保证业务运行连续性的需要来裁减流程,并形成标准化的流程。所谓标准化指的是在需求、开发、测试、维护的过程中将流程最小化。流程过于复杂是造成IT资源浪费的最重要原因,所以应该将流程最小化,同时将更多的精力、劳动、资源投入真正创造业务价值的生产中。
工作自动化
开发运维流程标准化是自动化的前提,如果流程不是标准化,那么自动化也是没有根基的。只有将流程标准化,自动化才能有定义的标准。
自动化能提升效率,还能使效率和质量透明化,让整个交付过程更加可控。
DevOps文化
DevOps是一种文化,它提倡团队成员围绕共同的业务目标,进行互相理解、信任、沟通和协作,在交付过程出现问题后,从中分析原因和吸取教训,而不是互相指责和推卸责任。
总的来说,DevOps涵盖CALMS(自动化、精益、可衡量和分享)文化,如下图:
从项目实践来看,DevOps是指导软件系统交付的一系列实践方法,贯穿于项目的计划、需求、设计、开发、部署、运维及终止的整套过程中。
从传统的IT项目交付的角度来看,DevOps实践框架包括:敏捷管理、持续集成、持续交付和自动化测试。
# 敏捷管理
指将需求以用户故事的方式进行拆解,然后以最小化、快速迭代的方式进行开发管理。
# 持续集成
指针对开发人员的代码提交过程,以单件流的方式进行流水线式的自动化管理。
# 持续交付
预先定义、规划从代码生成到产品产出的流水线,并以自动化、模板化方式进行交付。
# 自动化测试
根据测试流程,以模板化、自动化的方式实现测试的手段。