接触DevOps几年的时间了,对《DevOps软件架构师行动指南》这本书一直情有独钟,里面的内容总是让我有所感触。一直想写一些关于DevOps方面的文章,最近正好静下来,就打算写一个关于DevOps的系列文章,首先以笔记的形式讲述一下这本书中的内容,之后再总结下自己关于Devops的一些感触,如果有什么不到位的地方,还请大家留言一起讨论。
一、概述:
产生DevOps的驱动力来自于缩短新功能推出市场的时间,这些时间大部分可能来自于构建软件系统等流程性的时间。
1、来给DevOps下个定义:
DevOps是一套实践方法,在保证高质量的前提下缩短系统变更从提交到部署至生产环境的时间。
注意几点:
(1)在部署对系统的变更时(通常是代码形式),质量很重要。
(2)这个定义要求交付机制也是高效的。
(3)如果一种实践的目的是减少开发人员从提交代码到部署到生产环境之间的时间,那么不论是否包括了敏捷方法、工具和协作形式,这都是一种DevOps实践。
(4)DevOps不限于测试和部署实践,DevOps的目标是确保部署的系统在整个生命周期中都是高质量的。
2、DevOps实践
(1)从需求角度,把运维人员视为首要干系人;
(2)让开发人员更多的负责相关事件处理,缩短错误发现到修复的时间;
(3)强制推行所有人使用的部署过程,包括开发人员和运维人员;
(4)使用持续部署;
(5)在开发诸如部署脚本这样的基础设施代码时,也应遵守一套与应用程序代码相同的实践。
二、为什么是DevOps
从很多方面来讲,DevOps是对缓慢发布的问题做出的相应。
传统的发布计划步骤一般有以下几步:
1、与客户/干系人一起定义发布及部署计划并达成一致意见。
2、确保每个发布包包含的一组相关资产与服务组件之间是相互兼容的。
3、确保在整个转换活动期间都能保持发布包及组件的完整性并在配置管理系统中准确记录。
4、确保所有发布包和部署包都能追踪、安装、测试、验证、以及卸载或者在需要时能够回滚。
(之所以需要记录这个过程,是因为很多公司或者团队对整个部署的过程不够明确,也就更加无法理解DevOps姐姐的问题点在哪里。)
这样的过程导致开发人员和运维人员只有的开发结束后的培训中才会有短暂的沟通交流,很多时候会出现配合上的问题,同时,随着时间的推移,现在运维人员的指责越来越多,很难“找到并留住合格的人”。
为了解决这种困境,DevOps采用了一种不同的方法。它们把以前由运维人员完成的很多任务都自动化了,并让开发人员承担部分剩余的工作,通过这种方法,可以减少对专业运维人员的需求。
三、DevOps视角
1、自动化:
工具可以执行从构建、测试到执行的整个过程,针对生产环境或者一些外部规格说明检查操作的有效性,把过程中发生的错误通知适当的人,并且保留操作历史,以用于质量控制、报告和审计等目的。
脚本和文件也应该进行版本控制,也应该进行错误检查,这个术语通常称为“基础设施即代码”。
2、开发团队的职责:
在DevOps中,开发团队交付、支持并维护服务,这样因为所有所需的知识都保留在开发团队,需要向运维团队和支持人员转交的知识也就少了,就省掉了大量的协作步骤。
四、DevOps团队结构
1、规模:“两个披萨原则”:团队规模应该时两个披萨就够吃的。
2、团队角色:
(1)团队领导:负责协调团队,获取资源、保护团队不受问题的干扰。这个角色包含了项目管理的软技巧,但不包含注入制定计划、安排日程这样的技术能力。这些活动最好留给团队作为一个整体去完成。
(2)退队成员:负责系统创建和交付,包括建模、编程、测试和发布等其他活动。
(3)服务所有者:负责外部协作。服务所有者参与系统范围的需求活动,安排团队工作内容优先级,想团队提供来自团队服务的客户信息和提供给团队的关于服务的信息。服务所有者需要既能与其他干系人交流,又能与团队的其他成员交流。
(4)可靠性工程师:多个职责:在部署完成后立即对服务进行监控,包括金丝雀测试集的使用和取自服务的各种不同的指标;服务执行期间出现问题后的联系人;必须深入理解服务的内部,这样才能修复故障或者采用临时解决方案。
(5)看门人:在部署流水线中,决定将服务进入下一步的手动角色。参加决定发布包包含或不包含哪些内容的仲裁会议,了解罚不中包含的所有工作的背景和环境,对缺陷严重程度定级过程中存在的争议进行仲裁,可以批准最新添加的内容,可以坐出取消的决定。
(6)DevOps工程师:负责DevOps工具链中使用的各种工具的护理和保养。这个角色可以是个人、团队或组织层面。
五、协作
1、DevOps的一个目标是最大程度减少协作,以缩短推向市场的时间。
理想的协作机制的特点:从是否有延迟、需要做的准备工作以及人们的时间这几个方面讲,是低成本的,从所有相关干系人的可视性、快速解决问题、有效交流所需信息这几个反面,是高收益的。
2、团队协作:自动化图案对协作机制的目的是保护图案对成员不受自身或其他活动的干扰。
3、跨团队协作:跨团队协作是一个最耗时的因素,DevOps过程试图尽量减少这种协作。