DevOps(Development和Operations)是一组软件工程过程最佳实践,并非工具,旨在将制造世界的精益概念应用于软件世界。维基百科给出的定义是:
“DevOps是一种重视软件开发人员(Dev)和IT运维技术人员(Ops)之间沟通合作的文化、运动或惯例。透过自动化软件交付和架构变更的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。”
意味DevOps能够使以前团队各个孤立的角色(开发、IT 运营、质量工程和安全)可以建立协调和协作,以生产更好、更可靠的产品。通过采用 DevOps文化、做法和工具,团队能够更好地响应客户需求,增强对所构建应用程序的信心,更快地实现业务目标。
DevOps的过程始终伴随着应用程序的生命周期而开展,DevOps的生命周期是一个持续的软件开发过程,DevOps的最佳实践生命周期过程包括:计划、开发、集成、测试、部署、操作、监控等过程,并在整个软件生命周期中提供持续的反馈。可以由一个连续的循环图表示,如下所示:
在规划阶段,DevOps 团队构思、定义和描述他们即将构建的应用程序的特性和功能。他们在低粒度和高粒度级别上跟踪从单个产品任务到跨多个产品组合的任务进展。DevOps 团队以敏捷和直观的方式进行规划的一些方法包括创建积压工作 (backlog)、跟踪 bug、使用 scrum 管理敏捷软件开发、使用看板或仪表板直观地呈现项目进度。这一阶段的执行通常涉及所有团队成员,以确保计划的任何方面都不会被忽视或遗忘。
这个阶段团队执行代码开发。为了简化设计过程,开发人员根据前期定义的规范使用DevOps工具和Git等来帮助他们做好代码安全以及控制编码标准。
程序员完成任务后,他们使用Maven和Gradle等工具将代码提交到代码仓库
为了确保软件的完整性、正确性,产品首先交付到测试平台,利用JUnit、Selenium等工具执行各种测试,如用户可接受性测试、安全测试、集成检查、运行速度测试等。
如果项目满足所有需求,并且已经彻底检查了错误和其他问题,已经被验证为完全准备好状态,就可以进行发布。
在部署阶段,项目已为上线生产做好准备。此时,基础设施服务已经准备好,并使用各种DevOps工具构建并部署。
在操作阶段,团队在生产环境中测试项目,最终用户开始使用产品
在监控阶段,识别并记录产品使用情况以及反馈、问题或改进的方向。然后将这些信息传递给后续的迭代。这个阶段对于下一个迭代和简化开发过程是必不可少的。
这一步对于定义整个软件开发过程的远景至关重要。它主要侧重于项目规划和编码。在这个阶段,干系人和项目需求被持续收集和讨论。此外,产品待办事项列表也基于客户反馈进行持续维护,并被划分为较小的版本和里程碑,以促进持续的软件开发。一旦团队就业务需求达成共识,开发团队就开始编码以满足这些目标。这是一个持续的过程,每当项目的功能或性能需求发生改变时,开发人员都有义务进行编码。
在此阶段,完成的新代码、新功能和新特性将被并入现有代码中。此外,在单元测试的每个级的缺陷都会被识别出来,源代码也会相应地被更新。在这个过程中集成将是一个连续的过程。
质量评估师在此阶段定期测试软件的缺陷和问题。如果出现bug,代码将返回到集成阶段进行更正。在这个阶段,团队可以使用像Selenium这样的自动化测试技术以最大限度地减少了时间和精力。
这是DevOps生命周期中最重要和最活跃的步骤,在此期间,完成的代码被发布到服务器,并确保代码在服务器上能够正确部署。在整个生产阶段,开发团队将代码交付给服务器,并升级服务器配置,确保版本一致性。
持续的反馈被用来评估和提升应用程序的功能和质量。在这个阶段,将定期检查每个版本的客户端行为,以提升未来的版本和部署策略。公司可以使用结构化或非结构化策略收集反馈。
在此阶段,定期监控应用程序的功能和特性,以检测系统可能出现的故障,例如:内存不足或无法访问服务器等。这个过程使IT人员能够快速检测应用程序性能问题及其根本原因。每当IT团队发现一个严重的问题时,应用程序就会再次经历完整的DevOps周期,以完善解决方案。
这个阶段重点是要最大限度地减少维护和停机时间。通常,开发人员被迫使服务器离线以执行更新,这增加了停机时间,并可能使组织花费大量资金。最终,连续操作会自动启动应用程序并进行后续升级。可以考虑使用Kube.NETes和Docker等容器管理平台以消除停机时间。
DevOps是敏捷方法下,将开发和运营团队整合在一起的一种模式。DevOps涉及文化变革,技术工具有助于实施最佳实践。当涉及到DevOps工具,组织应该寻找适合自己团队的工具链,以改善协作、减少思维切换、提高工作效率。
DevOps各个阶段的常用工具如下:
生产:
基础设施即代码(IaaC):
源代码控制:
DevOps的重要性无法被忽视,它不仅是一种全新的软件开发方式,更是一种现代化的企业管理模式。随着容器化技术的普及,越来越多的组织开始采用DevOps。DevOps的开源工具也随着市场需要而不断发展,以下列举了一些特别优秀的开源免费的工具。
https://Github.com/git/git
版本控制为开发人员提供了一种用来跟踪代码中的所有更改和更新的方法,以便在出现错误时,团队可以轻松地恢复并利用代码的先前版本,目前而言Git是最好版本控制工具。
现在最流行的Git托管平台有:Github, Gitlab, and Bitbucket are now the most popular online Git repo hosting services.Github、Gitlab和Bitbucket等。
https://github.com/jenkinsci/jenkins
Jenkins是一个用于跟踪管理一些可重复任务进度的DevOps持续集成工具。它目前是最好的软件部署开源解决方案之一,它还附带了400多个插件,可以帮助团队开发、测试任何项目。Jenkins是一个基于JAVA开发的软件,可以在windows、mac OS X和UNIX上运行。支持持续集成和持续交付,并带有一个内置的GUI界面,设置和配置都非常简单。
https://github.com/docker
Docker也是DevOps的一个常用容器。它使得DevOps团队能够快速创建、部署和管理分布式应用程序。用户可以使用此工具从组件中构建应用程序并在其上进行协作。它是CaaS(容器即服务)的核心,CaaS平台内置了编排功能,可以使用私有注册表来存储、管理和配置镜像缓存,使镜像管理变得非常简单。
容器化的应用,使得团队可以将所有依赖项捆绑在应用的容器中,并将其作为一个独立的单元进行发布,以避免冲突、提高安全性。另外,Docker可以在任何系统或平台上运行,提高了部署、迁移效率。
https://github.com/ansible/ansible
Ansible是一款开源配置管理工具,它的赞助商是Red Hat。它非常适合用于设置公司的基础设施架构以及执行自动化部署活动。它拥有友好的用户界面和无代理设计。
Ansible是一个轻量级的、安全的DevOps解决方案,主要用于创建管理自动化,因为它具有无代理设计,因此不需要守护程序或自动机器人在后台运行。
Ansible还附带了各种集成模块,可与其他DevOps工具搭配使用,使得在Jenkins管道中,可以快速部署Ansible代码。
https://github.com/kubernetes/kubernetes
Kubernetes是一种容器编排技术,它将容器管理提升到一个新的水平。Kubernetes可以很好地与Docker或容器搭配工作,用以将容器组织成逻辑实体。
如果只有几个容器,那可能还不需要用到容器编排平台,但如果,容器达到一定数量级和复杂性之后,整个管理的复杂性就大大增加,使用Kubernetes便能够自动化轻松管理数百或数千个容器。
Kubernetes和DevOps可能看起来本质上不同。但实际上,将Kubernetes与DevOps环境集成可以对持续集成/交付流程产生积极影响。例如,可以让Kubernetes管理节点调度和部署多个容器。从而可以简化DevOps的构建/测试/部署流程。
https://github.com/chef/chef
Chef是一个用于管理云和非云传统系统的免费工具,能够减少团队学习新技术或在它们之间过渡所需的时间。特别适合用于需要从内部部署迁移到云架构的案例。它包括一个完整的开发工具包,用于构建系统、应用程序或者测试工具。
https://github.com/NagiosEnterprises/nagioscore
Nagios是一个免费的开源DevOps工具,用于监控基础设施,是DevOps生命周期中“监控”一种工具,能够帮助DevOps团队识别和解决网络以及基础设施存在道德问题。
Nagios提供了各种报告和图表,使团队能够轻而易举地跟踪大量事件和失败问题。另外,它还提供许多免费插件用于支持各种特殊的监控任务。
https://github.com/hashicorp/consul
Consul是一个开源DevOps工具,它具备分布式、高度可用和数据中心感知等能力,主要用于跨动态分布式基础设施连接和应用程序配置,非常适用于微服务应用程序的服务发现和设置。
主要功能包括:数据中心感知、服务聚合、服务发现、健康检测、动态应用程序配置等。
随着云计算、AI、大数据等技术的不断发展,DevOps将继续推动软件开发运维的变革。特别是在人工智能发展趋势下,软件开发运维将逐渐往智能化、自动化方向发展。