基于微软的相关产品的文档介绍,英文原版链接:https://docs.microsoft.com/en-us/azure/devops/learn/what-is-devops
1. DevOps是什么?
为了实现持续交付价值给终端用户,对相关人员、流程和产品的结合和统筹协同。
Dev和Ops的缩写意味着,代替了原本开发和运维团队竖井式的工作方法,强调创造多学科背景的团队成员一起努力,有共同有效的实践方法和工具集。
【注:筒仓式阶段(Siloed),或称为多重竖井布局,形象地说,就是像竖井一样,各自隔离,流程固然已经被定义了,然则各自为政,存在着“项目组墙”。】
基本的DevOps实践方法包括:敏捷规划(agile planning)、持续集成(continuous integration)、持续交付(continuous delivery)、应用监控(monitoring of applications)。
1.1 理解你的生产周期 understand your cycle time
假设软件开发的过程可以用奥达回路来描述。
【注:包以德循环或奥达回路(OODA Loop),OODA是observe(观察)、orient(调整)、decide(决策)和act(行动)的缩写。 OODA Loop: in the armed forces and other defense-related agencies, a carefully worked-out chart or guide for use in making decisions throughout varying levels of policy and command.】
起初为了防止战斗机飞行员在空中被击中,奥达回路是一个很好的领先于竞争者的思维方式。首先,你要观察行业、市场、需求、当前的用户行为和可获得的遥测数据;然后你调整你的方向,通过一一列出你能够实现的选择,也许通过实验来验证;之后你决定你继续做什么,最后通过交付一个可操作的软件,你付出了行动给真正的用户。所有的这些发生在一个生产周期内。
1.2 由数据来启示 become data-informed
但愿,你能够用数据来启示下一个周期你该做什么。很多经验报告表明,大约三分之一的部署会带来负面的经营成果,三分之一会有积极的经营结果,以及三分之一毫无影响。理想的情况下,你想要在那些不能促进经营成果的部署上快速失败,在那些能促进经营的部署上加快效率。有时称之为转移还是坚持(pivot or persevere)。
1.3 寻找验证学习的方法 strive for validated learning
你能够尽快失败或加倍效率的速度是由生产周期的长度决定的。你的生产周期决定了你收集反馈的速度,反馈数据决定了下一个周期会发生什么,在每个周期收集到的反馈应该是真实、可执行的数据,这叫做验证性学习(validated learning)。
【当你提出一个idea,它是一个未经证实的假设 (unproven assumption),可以通过一系列快速迭代产品,将它转变为一个经证实的认知。验证性学习(validated learning),即通过收集产品被真正使用后的衡量指标,而不是通过对用户的提问来验证效果。
你要能回答下面这样的问题:
- 我们在产品上所做的这些修改是否让更多的人注册了,逗留时间增加了,还是增加了收入? Or is it time to pivot?
- 在做A/B测试时,该特性在哪个版本的效果更好?
- 所有的系统指标看上去都不错,一个用户说我们的网站不能用。难道是我们的网站坏了吗?
- 我们产品中的哪些特性是收入的最大来源?】
1.4 缩短你的生产周期 shorten your cycle time
当你使用DevOps的实践方法时,可以通过小批量地工作、用更多的自动化、明确发布管道(release pipeline)、改进遥测、加大部署频率来缩短你的生产周期。
1.5 优化验证性学习 optimize validated learning
部署频率越快、能够实验的越多,你能够“转移还是坚持”的机会就越多,并且在每个周期都能够得到验证性学习。在验证性学习中的加速就是改进的价值,可把这个看做你实现的进步和避免的错误的总和。
2. 如何实现DevOps?
记住,目标是要缩短生产周期。从发布管道开始,去部署改过的一行代码或配置需要多长的时间?最终,那就是,给效率减速的地方。
2.1 Continuous Integration
持续集成会推进持续的代码合并和代码测试,这样能尽早找出缺陷,其他的好处是浪费尽可能少的时间在解决合并问题上,可以给开发团队带来更快的反馈。
2.2 Continuous Delivery
软件解决方案的持续交付给生产和测试环境,能够帮助企业快速修复bugs,对不断变化的经营要求快速反应。
2.3 Version Control, Usually With Git
版本控制(通常使用Git)使位于世界任何地方的团队能够在日常开发活动中进行有效的沟通,并与软件开发工具集成,以监视部署等活动。
2.4 Agile Planning and lean project management
敏捷规划和精益项目管理技术用于将工作计划和隔离到sprints中,管理团队能力,并帮助团队快速适应不断变化的业务需求。从DevOps角度定义Done就是,工作软件根据预期的业务目标收集遥测数据。
2.5 Monitoring and Logging
监视和记录正在运行的应用程序,包括用于应用程序健康运行和客户使用情况的生产环境,有助于组织形成假设,并快速验证或反驳策略。丰富的数据以各种日志格式捕获和存储。
2.6 Public and Hybrid Clouds
公共云和混合云使得不可能的事情变得容易。云已经消除了传统的瓶颈,并帮助基础设施商品化。无论您使用基础设施作为服务(IaaS)来提升和转移现有的应用程序,或平台作为服务(PaaS)以获得前所未有的生产力,云给您提供一个无限制的数据中心。
2.7 Infrastructure as Code (IaC)
基础设施即代码(IaC)是一种实践,它使环境的创建和分解能够实现自动化和验证,从而有助于提供安全和稳定的应用程序托管平台。
2.8 Microservices
微服务体系结构用于将业务用例(business use cases)分离为通过接口契约(interface contracts)进行沟通的小型可重用服务(small reusable services)。这种架构使可伸缩性和效率成为可能。
2.9 Containers
容器是虚拟化的下一个发展方向。它们比虚拟机更轻量,允许更快的水合作用【待查验】,并且可以从文件中轻松配置。