DevOps是什么?
DevOps运动开始于2007年左右,当时软件开发和IT运营社区开始担心传统的软件开发模式。在这种模式下,编写代码的开发人员和部署并支持代码的操作人员将独立工作。DevOps这个术语由“开发”和“运营”两个词组成,反映了将这些领域整合成一个连续过程的过程。
DevOps是如何工作的?DevOps团队包括开发人员和IT操作人员,他们在整个产品生命周期中协作以提高软件部署的速度和质量。这是一种全新的工作方式,也是一种文化转型,对团队及其工作组织产生了巨大的影响。
在DevOps模式下,开发和运营团队不再“孤立”。有时,这两个团队会合并成一个团队,合并后,工程师将参与整个应用生命周期(从开发和测试到部署和运营),并拥有多学科技能。
DevOps团队使用工具来自动化和加速流程,这有助于提高可靠性。DevOps工具链可以帮助团队处理重要的DevOps基础,包括持续集成、持续交付、自动化和协作。
DevOps的价值有时适用于开发团队以外的团队。当安全团队采用DevOps方法时,安全成为开发过程中的一个活跃部分。这叫做DevSecOps。
DevOps生命周期由于DevOps的连续性,从业者用无限循环来表示DevOps生命周期各个阶段之间的关系。虽然看起来是有顺序的,但是这个循环实际上意味着在整个生命周期中需要持续的协作和迭代改进。
DevOps生命周期由六个阶段组成,分别代表开发(周期的左半部分)和运营(周期的右半部分)所需的流程、功能和工具。团队将在每个阶段进行合作和沟通,以保持一致性、速度和质量。
规划开发团队应该采用敏捷开发实践来提高速度和质量。敏捷开发是项目管理和软件开发的迭代方法,它可以帮助团队将工作分解成更小的部分,从而提供增量价值。
Git是一个免费的开源版本控制系统。Git可以为分支、合并和重写存储库历史提供出色的支持,这为开发和构建过程带来了许多创新和强大的工作流和工具。
CI/CD的持续集成和交付?它允许团队频繁地、可预测地发布高质量的产品,从源代码库到使用自动化工作流的生产过程。团队可以频繁地合并代码变更、部署功能标签和集成端到端测试。
监控和报警可以快速识别和解决影响产品正常运行时间、速度和功能的问题。自动通知您的团队有关变更、高风险操作或失败的信息,以保持服务正常运行。
运维管理面向客户的端到端IT服务交付。这包括设计、实施、配置、部署和维护支持组织服务的所有IT基础设施所涉及的实践。
持续反馈DevOps团队应该评估每个版本并生成报告以改进未来的版本。通过收集持续的反馈,团队可以改进其流程,并采纳客户的反馈来改进下一个版本。
DevOps工具DevOps工具可以处理DevOps生命周期的关键阶段。它们通过帮助改进协作、减少上下文切换、引入自动化以及实现可观察性和监控功能来支持DevOps实践。
DevOps工具链通常遵循两种方式:集成式或开放式工具链。一体化工具链提供了完整的解决方案,通常不与其他第三方工具集成。开放式工具链允许使用不同的工具进行定制。这两种方法各有利弊。
DevOps有什么优势?根据“2020年DevOps趋势调查”,99%的受访者表示DevOps对他们的组织产生了积极的影响。DevOps的优势包括更快更容易的发布,团队效率,更高的安全性,更高质量的产品,以及更高的团队和客户满意度。
实践DevOps以更频繁地发布可交付成果的团队具有更高的质量和稳定性。事实上,DORA 2019 DevOps状态报告发现,精英团队的部署频率和速度分别是绩效差的团队的208倍和106倍。连续交付使团队能够使用自动化工具来构建、测试和交付软件。
改进协作性DevOps的基础是开发人员和运营团队之间的协作文化,他们将分担责任并协调他们的工作。这样可以提高团队的效率,节省工作交接和编写专门为其运行环境设计的代码的时间。
快速部署通过提高发布的频率和速度,DevOps团队可以快速改进产品。快速发布新功能和修复缺陷将有助于获得竞争优势。
持续集成和持续交付质量和可靠性等实践可以确保变更正常运行并且安全正确,从而提高软件产品的质量。监控有助于团队实时了解绩效。
安全性通过将安全性集成到持续集成、持续交付和持续部署的管道中,DevSecOps已经成为开发过程中的一个活跃部分。通过将主动安全审计和安全测试集成到敏捷开发和DevOps工作流中,可以将安全性植入到产品中。
采用DevOps有哪些挑战?旧习惯很难改变。陷入孤立工作风格的团队可能难以应付,甚至抵制完全改变团队结构以采用DevOps实践。一些团队可能会错误地认为新工具足以采用DevOps。然而,DevOps是人、工具和文化的结合。DevOps团队中的每个人都必须了解整个价值流,从概念、开发到最终用户体验。它需要打破孤岛,以便在整个产品生命周期中进行协作。
Devops不是任何个人的作品,而是每个人的作品。从传统基础设施切换到基础设施,即代码(IaC)和微服务,可以加快开发和创新,但增加的运营工作量可能极具挑战性。最好为自动化、配置管理和持续交付实践打下坚实的基础,以帮助减轻负担。
过度依赖工具会让团队偏离DevOps的必要基础:团队和组织架构。一旦架构建立,就要建立流程和团队,然后确定工具。
如何领养DevOps?首先,采用DevOps需要承诺评估并可能更改或删除组织当前使用的所有团队、工具或流程。这意味着需要构建必要的基础设施,以便团队可以独立地构建、部署和管理其产品,而不需要过多依赖外部团队。
DevOps文化DevOps文化是指团队采用新的工作方法的环境,包括加强合作和沟通。这是人员、流程和工具的协调,以实现更加统一的面向客户的服务。多学科团队负责整个产品生命周期。
在DevOps中继续学习良好的组织鼓励实验和一定程度的冒险。在这些组织中,跳出固有的思维模式是正常的,而失败被理解为学习和进步的自然组成部分。
敏捷开发方法在软件行业非常流行,因为它们给团队带来了固有的灵活性、出色的有序性和应对变化的能力。DevOps是一种文化转型,可以促进软件构建者和维护者之间的协作。当敏捷开发和DevOps一起使用时,可以提高效率和可靠性。
DevOps实践持续集成
持续集成是将代码变更自动集成到软件项目中的实践。它允许开发人员频繁地将代码变更合并到一个中央存储库中进行构建和测试。这有助于DevOps团队更快地修复缺陷,提高软件质量,并缩短验证和发布新软件更新所需的时间。
连续交货
连续交付通过将代码变更自动部署到测试/生产环境中来扩展连续集成。它将沿着连续输送管道前进。在这个管道中,自动构建、测试和部署将被安排为一个发布工作流。
情境意识
对于组织中的每个成员来说,尽可能高效、快速地访问完成工作所需的数据是非常重要的。团队成员需要接收部署管道中的故障告警(无论是系统故障还是测试失败导致的故障),及时接收生产中运行的应用的运行状态和性能的最新信息。指标、日志、跟踪、监控和警报都是团队了解工作进展所需的重要反馈来源。
自动化
自动化是最重要的DevOps实践之一,因为它使团队能够更快地完成高质量软件的开发和部署过程。借助自动化,将代码更改推送到源代码库的简单操作就可以触发构建、测试和部署流程,从而大大减少这些步骤花费的时间。
基础设施就是代码。
无论您的组织是拥有本地数据中心还是完全托管在云中,快速、一致地调配、配置和管理基础架构的能力都是成功采用DevOps的关键。基础设施即代码(IaC)不仅仅是编写基础设施配置脚本,还将基础设施定义视为实际代码:使用源代码控制、代码审查、测试等。
微服务
微服务是一种架构技术。在这种技术中,应用程序被构造为一系列小服务,它们可以彼此独立地部署和运行。每个服务都有自己的进程,并通过接口与其他服务通信。这种分离和关注点分离的独立功能支持DevOps实践,比如持续交付和持续集成。
班长
DevOps团队监控从规划、开发、集成和测试、部署到运营的整个开发生命周期。通过这种方式,团队可以快速、自动地应对客户体验的任何下降。更重要的是,它允许团队“向左移动”到开发的早期阶段,并最小化破坏性的生产更改。
开始使用DevOps
开始使用DevOps最简单的方法是确定小的价值流(比如小的支持应用程序或服务),然后开始尝试一些DevOps实践。与软件开发一样,与一小组利益相关者一起转换单个数据流要比在一个组织中一次性尝试过渡到一种全新的工作方式容易得多。