2017年11月17日,云计算开源产业联盟第一次跟高效运维社区一起在上海合办了首届金牌运维峰会,在工信部软件司的指导下,由中国信通院牵头的云计算开源产业联盟在推动运维相关标准方面也有了很大成果,我将代表编写团队,发布两个已经完成的标准(DevOps 标准、蓝鲸运维标准),本文将着重介绍 DevOps 标准。
DevOps 的标准体系,目前我们发布的是一个 Beta 版,用我们业界比较流行的代码术语是一个体验版。
为什么要做 DevOps 的标准体系,已经有这么多的最佳实践和开源工具,我们为什么要做这个事情呢?
我们经常在不同的场合听到了 DevOps 这个词,但是我听到大家讲的角度维度都不一样,有人认为自动化运维就是 DevOps,有人认为运维的人员会开发,是不是就是 DevOps,那么还有一些我们的容器厂商从产品的角度说 DevOps,还有我们从培训的角度去玩玩沙盘,是不是就会懂了 DevOps,是不是我们把上面的组合起来就知道什么是 DevOps 呢?其实不是的。
我们在不同场合听到 DevOps 都好像盲人摸象一样,谁都只是摸到了大象的一部分。所以我们做这件事情的目的主要有两方面:
正因为我们可以做到三正,所以这个标准是有实操意义的,拿了这个标准,不管是运维人员还是 CIO 等等,就可以看到你们的公司团队如何根据这个标准去明确不同的流程,明确不同的组织架构,明确如何一步一步的去实施。
我们这个标准体系一共有7部分:
第1部分是总体架构,包括概念和框架和能力的分级。从第2部分到第7部分就是我们这个框架里的每一个部分的能力成熟度模型,主要包括敏捷开发过程,持续交付过程,技术运营过程,还有总的应用框架、安全管理和组织结构。可以看到从第2部分到第4部分,都是过程类的,第5部分是应用架构类的,第6部分是安全管理类的,第7部分是组织结构类的。
“研发运营一体化能力成熟度模型”,是国内外第一个 DevOps 标准体系。
DevOps 标准体系包含下面两大目的:
本次发布的是前3部分的征求意见稿。
前三部分为总体架构,敏捷开发管理过程和持续交付过程相关标准。以下为您详细解读。
研发运营一体化(DevOps)能力成熟度模型覆盖端到端软件交付生命周期全流程,是一套体系化的方法论、实践和标准的集合。研发运营一体化总体架构可划分为三部分,即过程(敏捷开发管理、持续交付、技术运营)、应用架构和组织结构。
所以如果应用架构、安全管理和组织架构跟不上,也是做不到 DevOps 能力的。往往是每个环节把自己的事做好的,需求迸发出来了,可能才会去推动进一步的组织结构的变动,这是第三个纬度的事情。
理解 DevOps 可以从过程、多个点、不同维度去理解。DevOps 是一个过程,过程里的每一个小环节,涉及到人、团队、工具。后面分级的理念也是每个小环节从人、过程管理、工具团队的协作这几个纬度去分的。
要做好 DevOps,首先把每个小环节做好,进而把整个过程做好了,然后再推动整个组织架构一系列的变革。
为什么这里叫运营研发一体化,不叫 DevOps 呢?
因为国内标准不能出现英文词的,而且 DevOps 这个词它是具有阶段性的。也许过个十几年就没有 DevOps 了,标准要普世性,所以这里没有用 DevOps,用的是研发运营一体化。从这个词也可以看出来它贯穿了研发,一直到运营。
成熟度分级的对象,就是研发运营一体化,研发运营一体化就是刚才讲的那几个纬度。我们分级的时候,可以对整个研发运营一体化进行分级,也可以小到某个环节,大到某个部分去进行成熟度的分级。
这样有助于了解每个环节的情况,有助于逐个击破,提升自己 DevOps 的能力。分级成熟度就是从阻碍一直到优化这五个级别,很容易理解。
这里面讲的是敏捷需求管理、迭代计划管理和敏捷过程管理,属于刚才讲的第一级的环节,每一个环节可以分成很多小环节。
其中需求管理细分为需求收集、需求分析、需求与用例和需求验收四个细分维度。需求收集从单个需求点、需求全貌、需求的管理、人员机制以及工具能力五个维度进行评估;需求分析从需求内容和形式、需求协作、需求的管理、人员机制以及工具能力五个维度进行评估;需求与用例从需求与用例编写、需求用例验证、需求与用例的管理、人员机制以及工具能力五个维度进行评估;需求验收从需求验收频率、需求验收范围、需求验收反馈效率、人员机制以及工具能力五个维度进行评估。
其中计划管理细分为需求澄清与拆解、故事与任务排期、计划变更三个维度。需求澄清与拆解从需求澄清的时间、内容的完备性、协作、人员机制以及工具能力五个维度进行评估;故事与任务排期从排版要素、排版容量、排版管理、人员机制以及工具能力五个维度进行评估;计划变更从变更决策、应对变更、减少变更、人员机制以及工具能力五个维度进行评估。
其中过程管理细分为迭代管理、迭代活动、过程可视化及流动、度量分析四个维度。
以下就部分内容进行阐述。
需求收集环节是需求提出方和产品经理之间明确产品需求的阶段,是产品研发运营一体化最初始阶段,把产品的需求具象化,形成待办事项列表的过程。
需求收集环节包括三个方面工作:
这三个工作从人员机制到工具能力,会用到不同程度的工具,以及人员协作的流畅度,协作的程度是不一样的。所以把它分成五级,大家可以看一下上图右边的内容。
最高级的是,需求方就是产品经理可以把需求方的每个点形成一个功能点,并且把功能点形成整个需求的全貌,形成一个列表,进一步形成路线图,这个路线图可以是在后续的迭代开发中不断的优化。
在工具能力方面会用到很多需求管理,用统一的工具对需求进行管理。组织架构方面,企业采用扁平化的敏捷团队组织架构,赋予团队围绕产品自组织、自管理的权力,包括但不限于产品规划、建设、运营、人力、绩效、核算等。
例如,敏捷团队以业务价值为核心以运营为驱动的敏捷工作模式,企业为团队提供IT基础设施、基础管理等支持。第一个环节,如果做到这一级的话,是非常好的。如果是普通程度的情况,一个是传达的需求不明确,第二个没有用到任何的工具,这样普通的级别在后续的迭代计划中根据计划的改变而进行改变,是不够灵活的。
这是需求收集环节我们的分级。大家可以对应表看看你是属于哪个程度哪一级的。
需求分析是产品经理将需求细化和拆解成用户故事的过程。
主要体现三个方面:
需求分析最主要的方式把整个甲方或者需求方的需求场景,进行统一的分类。在开发过程中对它进行不断的评估,进行细化,最后把场景按照业务价值,由高到低进行排定优先级。
上面需求收集只是说形成了一个待办事项列表,保证不停的更新。这个时候需求分析能够按照不在待办事项里,能够按照优先级去进行标注,进一步根据后面的迭代开发情况进行不断的反馈。
需求与用例管理是指产品经理和开发团队把用户故事的验收标准和测试用例进行关联性,能验收产品功能是否满足用户故事的要求的过程。
主要体现在三个方面:
刚才已经把需求分了级,分了场景后,开发有没有达到我们的需求呢?这个地方对需求管理很重要了,要预先有一些测试例,能够很好地判断后面的开发有没有达到。如果有问题再反馈回来,我们的需求进一步调整。
应建立企业级可视化便捷的平台,管理需求文档,且可以通过需求文档能查看产品的全貌,且通过平台,需求提出人、最终使用人、产品经理、开发运维人员进行更好的沟通和协作。保证可持续性,它有一个持续,每个环节都可以持续,持续都是持续到下一个环节,交付环节的。
需求验收是指产品经理、需求提出者和最终用户对产品的功能验收,要求能对需求进行快速测试、快速确认、快速反馈、快速优化。
本节的需求验收,仅是指功能验收,非功能测试不在本节的范围内。需求验收主要体现在以下三个方面:
最后是需求的验收,包括设计验收的频率、制定验收的测试方案、指标等等。并不是强制要求你的频率一定要达到多少次。不同的产品验收频率验收结果是不一样的。更多是告诉你一种方法论,在这个过程中也是需要你用到一系列的工具,去辅助你能够自动化去进行需求的验收等等。
最高级别应建立企业级大数据分析工具,能抓取用户行为数据,通过大数据分析,在用户功能验收和用户体验时作为辅助决策依据,持续优化改进。需求的环节在敏捷开发里是非常重要的,下面的环节叫迭代计划管理。
其他相关标准内容,详解相关文档(文末可下载)。
第三个标准就是持续交付的过程,它分为配置管理、部署等等,分了好几个环节。每个环节包括一些子环节,每个子环节从很多纬度进行能力的评估。
其中配置管理细分为版本控制、版本可追踪性两个维度。版本控制从版本控制系统、分支管理、构建产物管理、单一可信数据源四个维度进行评估;版本可追踪性从变更过程、变更追溯、变更回滚三个维度进行评估。
其中构建与持续集成分为构建实践、持续集成两个维度。构建实践从构建方式、构建环境、构建计划、构建职责四个维度进行评估;持续集成从集成服务、集成频率、集成方式、反馈周期四个维度进行评估。
其中测试管理分为测试分级策略、代码质量管理、测试自动化三个维度。测试分级策略从分层方法、分层策略、测试时机三个维度进行评估;代码质量管理从质量规约、检查策略、检查方式、反馈处理四个维度进行评估;测试自动化从自动化设计、自动化开发、自动化执行、自动化分析四个维度进行评估。
其中部署与发布管理分为部署与发布模式、持续部署流水线两个维度。部署与发布模式从部署方式、部署活动、部署策略、部署质量四个维度进行评估;持续部署流水线从协作模式、流水线过程、过程可视化三个维度进行评估。
其中环境管理分为环境类型、环境构建和环境依赖与配置管理。
其中数据管理分为测试数据管理和数据变更管理两个维度。测试数据管理从数据来源、数据覆盖、数据独立性、数据安全四个维度进行评估;数据变更管理从变更过程、兼容回滚、版本控制、数据监控四个维度进行评估。
其中度量与反馈分为度量指标和度量驱动改进两个维度。度量指标从度量指标定义、度量指标类型、度量数据管理、度量指标更新四个维度进行评估;度量驱动改进从报告生成方式、报告有效性、报告覆盖范围、反馈改进四个维度进行评估。
版本控制是从版本控制系统、分支管理和构建产物管理和单一的可信数据源。
从五个方面对它进行成熟度的分级。最高级,比如在版本控制系统方面,要有版本的控制系统,产品开发的版本控制系统。它是有生命周期的,所有的版本,包括修改等等流程都可以进行管理。比如分支的管理,就是持续优化分支管理策略,等等。
版本的可追溯性,版本可追溯性是指软件系统中的每一次变更都可以追溯变更的详细信息,并向上追溯变更的原始需求、流转过程等所有关联信息。支持全程的数据分析管理和满足审计的要求。这里审计要求是指你这个产品的开发,每一步 BUG 的修改、每一步的变更是谁做的,它修改了哪一步。也是可追溯的意思。
可追溯性也是版本回滚的历史依据和实施基础,建立良好的版本可追溯性可实现对任一版本完整环境流程的自动化,精确回滚,快速重现问题和恢复正常环境。
版本的管理就是构建与持续的集成。构建的实践包括持续优化的构建服务平台、持续改建服务的易用性。
构建是将软件源代码通过构建工具转换为可执行程序的过程,一般包含编译和链接两个步骤,将高级语言代码转换为可执行的机器代码并进行相应的优化,提升运行效率。
持续集成是软件构建过程中的一个最佳实践,在版本控制的基础上,通过频繁的代码提交,自动化构建和自动化测试,加快软件集成周期和问题反馈速度,从而及时验证系统可用性。
这里可以用容器管理工具,因为容器很方便可以把很多应用做成标准化,封装成容器的格式,方便不断做镜像,不断进行扩充管理。方便了微服务架构的开发,可以去管理一些应用,所以这里很多人都会用到容器的原因,在这把它当做一个管理的工具去实现了。
跟构建实践差不多的,持续优化和改进团队的持续集成的能力和变更。
部署与发布泛指软件生命周期中,将软件应用系统对用户可见,并提供服务的一系列活动,包括系统配置,发布,安装等。整个部署发布过程复杂,涉及多个团队之间的协作和交付,需要良好的计划和演练保证部署发布的正确性。
其中部署偏向技术实践,即将软件代码,应用,配置和数据库变更应用到测试环境、准生产环境和生产环境的过程。发布偏向于业务实践,指将部署完成的应用软件功能和服务正式对用户可见,提供线上服务的过程。部署和发布的有机结合,实现了软件价值向最终用户的交付。
持续部署流水线是 DevOps 的核心实践,通过可靠可重复的流水线,打通端到端价值流交付,实现交付过程中各个环节活动的自动化和可视化。部署流水线通过将复杂的软件交付流程细分为多个阶段,每个阶段层层递进,提升软件交付质量信心,并且在流水线过程中提供快速反馈,减少后端环节浪费。
可视化流水线可以增强跨组织的协同效率,提供有效的信息共享平台,从而统一组织目标,并且不断识别流水线中的约束点和瓶颈,以及潜在的自动化及协作场景,通过持续改进而不断提升软件交付效率。
环境作为 DevOps 持续敏捷交付过程中最终的承载,环境的生命周期管理、一致性管理、环境的版本管理都变得非常重要。环境管理是用最小的代价来达到确保一致性的终极目标。
其他相关标准内容,详解相关文档(文末可下载)。
这里也非常感谢写 DevOps 工作组的所有成员,他们不仅有来自运维厂商的,还有很多运维运营多年的专家。这个标准是在我们中国通信标准化协会,也就是云计算开源产业联盟的挂靠单位下的 TC1 工作组立项为标准的。