"DevOps"是"Development"(开发)和"Operations"(运维)两个术语的组合,旨在代表公司应用开发和IT运维团队执行的任务的协作或共享方法。
DevOps描述了采用迭代软件开发、自
动化以及可编程基础设施部署和维护的过程。DevOps可以改变软件交付链、服务、工作角色、IT工具和最佳实践。
DevOps通常采取的方法:
- 连续集成和连续交付或连续部署(CI/CD)工具,重点是任务自动化;
- 支持DevOps采用的系统和工具,包括实时监控、事故管理、配置管理和协作平台;
- 与DevOps方法同时实施的云计算、微服务和容器。
DevOps 解决什么问题?
每家公司都面临着自己的挑战,但共同的问题包括发布时间过长、软件未达到期望和IT限制业务增长。
在没有等待时间、手动流程和冗长审查的情况下,DevOps项目可以从需求到实际软件的过程中更快地推进。
DevOps解决了IT专业化之间的沟通和优先级问题。传统的结构将开发和运维团队放在独立的领域中。这意味着当开发人员的代码交付功能时,他们满意了 —— 如果发布在生产环境中出现问题,就由运维团队来解决问题。
DevOps工具
DevOps是一种思维方式,而不仅仅是一套工具。但在没有合适工具的情况下,在IT团队中进行任何操作都是困难的。DevOps从业者依赖于持续集成/持续交付(CI/CD)管道、容器和云主机。工具可以是开源的、专有的,或者是对开源技术的支持分发。
代码存储库
版本控制的源代码存储库使多个开发人员能够共同处理代码。开发人员可以check out 和check in 代码,并在需要时还原到先前的代码版本。这些工具会记录对源代码所做的修改。如果没有跟踪,开发人员可能难以了解哪些更改是最近的,以及哪些代码版本可供最终用户使用。源代码管理的工具包括Git和GitHub。
二进制存储库
源代码被编译成用于测试的二进制执行文件。二进制存储库支持版本控制的、基于对象的输出。二进制存储库的工具包括JFrog Artifactory和Nexus Repository。
CI/CD管道引擎
CI/CD使DevOps团队能够通过在开发生命周期中自动化验证和交付应用程序来频繁地将应用程序提供给最终用户。持续集成工具初始化流程,使开发人员可以在共享存储库中创建、测试和验证代码,而无需手动工作。持续交付通过执行生产级别的测试和配置设置来扩展这些自动步骤,以进行发布管理。持续部署更进一步,调用测试、配置和供应,以及监控和潜在的回滚能力。用于CI、CD或两者兼而有之的常见工具包括Jenkins、GitLab和CircleCI。
容器
容器是在共享操作系统上运行软件的隔离运行时环境。容器提供了一种抽象,使代码能够在从开发到测试和暂存,然后到生产的不同基础设施上运行相同。Docker是最知名的容器化软件,而Microsoft提供了特定的Windows容器选项。容器编排器,如Kubernetes以及商业化的Kubernetes发行版Red Hat OpenShift和Amazon Elastic Kubernetes Service,可以自动部署、扩展和维护容器。
配置管理
配置管理系统使IT能够根据脚本或模板进行软件、中间件和基础设施的配置和预配。DevOps团队可以通过配置管理工具为软件代码发布设置部署环境,并在服务器、容器和虚拟机上执行策略。对部署环境的更改可以进行版本控制和测试,以便DevOps团队可以将基础设施作为代码进行管理。配置管理工具包括Puppet和Chef。
云环境
DevOps企业通常同时采用云基础设施,因为它们可以自动化其部署、扩展和其他管理任务。AWS和Microsoft Azure是最常用的云服务提供商之一。许多云供应商还提供CI/CD服务。
监控
监控工具使DevOps专业人员能够观察系统、网络和基础设施上的代码发布的性能和安全性。他们可以将监控与提供运营智能的分析工具相结合使用。DevOps团队共同使用这些工具来分析代码更改对整体环境的影响。选择范围广泛,但包括New Relic One、Dynatrace、Prometheus、Datadog和Splunk等。
基于云的DevOps管道
公共云提供商提供原生的DevOps工具集,可与其平台上的工作负载一起使用。一个不完整的列表包括AWS CodePipeline和CloudFormation、Azure DevOps和Pipelines,以及Google Cloud Deployment Manager。采用云的企业可以选择使用这些预先集成的服务或运行第三方工具。例如,一个企业可以使用HashiCorp Terraform或CloudFormation为其AWS工作负载创建基础设施即代码的模板。
即服务模型
DevOps作为服务是一种工具集的交付模型,促进了企业的软件开发团队和IT运营团队之间的协作。在这个交付模型中,提供商组装了一套工具,并处理了集成,以无缝地覆盖代码创建、交付和维护的整个过程。