成功实施 DevOps 计划的 12 种工具

众所周知,DevOps 是一个软件开发与交付的过程。它可以协助强调产品管理、软件开发和运营专业人员之间的沟通、以及跨职能的协作。

我们根据以往数十年在 IT 行业,特别是基础架构方面积累的经验,精心挑选了十二种 DevOps 工具,为您进行功能性的介绍。同时,我们还将和您讨论 DevOps 的转型路线图,以及分步实施的相关指南。

由于 DevOps 的主要目标是为了改善各个利益相关者之间的协作状态,因此从规划、部署到 IT 项目的运维,它能够实现:

  • 提高部署的频率。
  • 减少更新 / 修复之间的时间。
  • 实现快速的交付。
  • 缩短恢复的时间。
  • 降低新版本的失败率。

DevOps 转型路线图

根据软件开发的生命周期,DevOps 的实施方法一般分为如下三个主要阶段:

  • 构建 (DevOps 持续集成)。
  • 测试 (DevOps 持续测试)。
  • 发布 (DevOps 持续交付)。

DevOps 的主要重点在于:通过简化交付流程和标准化开发环境,以提高交付的效率、安全性和可预测性。DevOps 赋予了整个团队构建、交付、验证和支持其软件应用的自主权。它使得开发人员能够更好地了解基础架构,从而更好地控制整个生产环境。

在开始 DevOps 转型之前,企业首先要定义好现有的业务流程、IT 基础架构、以及交付的管道;然后通过制定明确的目标,让 DevOps 的实施策略真正能够在本企业落地。

尽管在不同的企业中,实现 DevOps 的方式有所不同,但是与 DevOps 相关的流程通常会包括如下 6 个 C 的阶段:

  • 持续开发 – 持续开发涉及到计划、概述和引入新的代码。持续开发的目的是:优化代码的构建过程,并减少开发和部署之间的用时。
  • 持续集成 (CI) – DevOps 实施的实践涉及到将开发的代码集成到中央存储库之中。在该存储库中,配置管理(CM) 工具与测试开发工具相集成,以跟踪代码的开发状态。此外,CI 还包括在测试和开发之间形成快速的反馈,以便能够识别和解决此过程中可能出现的各种代码问题。
  • 持续测试 – 持续测试的目的是:加快代码向生产环境的交付。DevOps 在此阶段涉及到更新应用程序的代码,并运行预定的、自动化的代码测试。
  • 持续交付 – 持续交付旨在:快速、持续地交付那些将在生产环境中部署的更新和变更。持续交付可以确保:即使开发人员持续进行频繁的修改,其代码也能始终处于可部署的状态。
  • 持续部署 (CD) – 类似于持续交付,持续部署就是通过使用各种容器类技术工具 (如:Docker 和 Kubernetes),自动化地将新的、或修改好的代码发布到生产环境中。在此阶段中,维护不同部署环节中代码的一致性,显得尤为关键。
  • 持续监控 – 此阶段涉及到对操作代码、以及支持代码的基础架构进行持续的监控。同时,我们也需要对生产环境中与应用部署相关的变更进行持续监控,以确保应用的稳定性,并具有最佳的性能。

DevOps 的优势

企业实施 DevOps,能够获得如下主要优势:

  • 更好、更快地交付产品。
  • 更高级的自动化与可扩展能力。
  • 更清晰的系统性结果。
  • 稳定的操作环境。
  • 更好地利用资源。

尽管 DevOps 的概念已经存在了十年之久,但是与其他方法类似,它在落地的过程中同样有一些值得我们注意和避开的坑点。总的说来,其特点包括:

a) 成本问题

DevOps 的实施虽然可以减少项目失败的可能,以及回滚的次数,进而在长远的维度上降低 IT 的总体成本。但是,如果没有在实施 DevOps 之前做好适当的规划与预算,那么您在转型的实践中可能会让成本陷入无底洞。

b) 技能不足

要想成功地采用 DevOps,企业往往需要聘请合格的 DevOps 专业人员。这些 DevOps 顾问往往能够熟练地管理团队,并建立协作的文化氛围。

c) 复杂的基础架构

基础架构的复杂性是成功实施 DevOps 的另一挑战。企业会逐渐发现那些在孤立环境中部署出的不同服务,很难被集成到通用的基础架构中,进而创建新的应用程序。企业需要对 DevOps 团队进行培训,以了解组织转型的目标,以及计划实施的路线,并由资深 DevOps 顾问来管理好复杂的基础架构转换。

DevOps 实施–分步指南

1. 建立一支胜任的 DevOps 团队

通常,在迁移到任何新的技术之前,我们首先需要正确地识别资源,并组建一支足以胜任 IT 项目各项挑战的团队。那么 DevOps 团队成员的基本素质就应当包括:找到问题根源的批判性思维,熟练使用最新 DevOps 工具和热衷于学习此类新工具的能力,以及能够进行故障排除和实验性解决问题的能力等。只有组建一支胜任的团队,企业才能够按需整理需求,计划实施路径,部署软件,并最终实现完美的软件交付。

2. 制定可靠的 DevOps 策略

基于如下六个方面的参数,实施 DevOps 策略:

  • 快速执行 - 任何组织计划的最终目标都是为了:在不断创新的基础上,实现更快速度的执行,以提高客户的满意度。那么,DevOps 实践环节中的持续部署,就能够确保交付的准确性和速度。
  • 可扩展性 – 基础架构即代码 (Infrastructure-as-code,https://dzone.com/articles/why-use-infrastructure-as-code-and-how-to-be-succe)的实践能够协助在软件产品生命周期的各个阶段 ( 包括开发、测试和产品交付),进行可扩展式的精确管理。这对于 DevOps 的成功实施是至关重要的。
  • 可靠性 – DevOps 的持续集成、持续测试和持续交付等实践,能够通过确保安全和高质量的输出,来提供良好的最终用户体验,以及操作上的可靠性。
  • 协作 – 通过有效的跨团队协作和沟通,DevOps 能够消除低效的流程、有限的管理时间、以及项目失败的可能。
  • 频繁交付 – DevOps 的持续交付、集成和部署实践,可以实现快速的交付周期,缩短实施过程中必要的恢复时间,从而进一步为创新留出更多的时间。
  • 安全性 – 各种自动化的合规性策略、以及配置管理技术,使得 DevOps 模型可以通过基础架构即代码和策略即代码 (policy as code) 的实践,来获得更大的安全性。

3. 从小处做起

我们可以从小规模的项目开始,然后逐步转移到全方位的 DevOps 上。通过小规模的变更,我们可以检验对于测试和部署的管理效果。在此基础上,我们根据其效果,再决定下一步是否实施组织级别的 DevOps。

4. 尽可能地自动化

DevOps 的基础源于快速执行的能力。通过精心选择自动化的工具,我们可以避免重复性的手动交付,实现更快速的流程执行,进而节省项目参与者的时间、精力和整体预算。

5. 准备合适的环境

准备合适的持续测试与交付环境,对于 DevOps 的成功实施同样至关重要。哪怕是对于应用程序的细微修改,我们也应该准备一个稳定的测试与交付环境,以确保根据自动化的测试结果,是否将更改或添加后的代码快速地部署到生产环境中。

6. 选择合适的工具并构建强大的通用性基础架构

在 DevOps 的实施过程中,同样关键步骤是:基于自身特有 IT 环境的兼容性,选择合适的工具,以实现平稳的集成。通过合适的工具集,您可以使用自定义的工作流、以及访问控制,来构建出强大的基础架构和流畅的功能集。

DevOps 工具链

目前,业界有许多 DevOps 工具,可以帮助用户简化和自动化软件的交付管道,以及工作流程的不同阶段,并最终确保有效的实施。按照如下的生命周期划分方式,我们在此罗列出每一个阶段的 DevOps 专有工具,供您参考、测试与选择。

  • 计划:这是定义业务价值和需求的重要阶段。
    • 工具示例 - Git,Jira
  • · 编码:涉及到软件的设计,以及代码创建的详细过程。
    • 工具示例 - Stash,GitHub,GitLab
  • · 构建:此阶段主要是在自动化工具的帮助下,管理各种软件的构建和版本。因此自动化的工具将协助编译和打包代码,以供将来发布到生产环境中。
    • 工具示例 - Docker,Puppet,Chef,Ansible,Gradle
  • · 测试:这是确保代码质量的持续测试阶段。
    • 工具示例 - Vagrant,Selenium,JUnit,Codeception,BlazeMeter,TestNG
  • · 部署:这是管理、计划、协调、以及将各种产品自动发布到生产环境中的阶段。
    • 工具示例 – Jenkins,Kubernetes,Docker,OpenShift,OpenStack,Jira
  • · 监视:该阶段主要是在生产环境中识别和收集已发布的软件相关问题与信息。
    • 工具示例 - Nagios,Splunk,Slack,New Relic,Datadog,Wireshark

目前,由于没有哪一种工具可以包括所有的开发和交付阶段,因此我们需要在了解自身流程的基础上,通过不同的工具来为企业建立合适的 DevOps 文化。下面我们来一起讨论那些适合于软件开发不同阶段的 12 种 DevOps 工具:

1.Jenkins

Jenkins 是在软件开发领域广为采用的一种非常出色的 DevOps 自动化工具。从本质上说,它是一款开源的 CI/CD 服务器,可以在交付流程的不同阶段实现自动化。凭借着其庞大的插件生态系统 (超过 1000 个),Jenkins 可以与包括 Puppet、Docker 和 Chef 在内的多种 DevOps 工具相集成。

Jenkins 的特点:

  • 可以根据用户的个人需要,来设置和定制 CD 管道。
  • 可以在 Windows、Linux 和 macOS X 上运行,因此上手比较容易。
  • 能够以更快的速度迭代和部署新的代码。

2.Git

Git 是一种分布式源代码管理类 (SCM,source code management)DevOps 工具,目前正在被广泛地应用于软件开发行业。它既可以使用户轻松地跟踪开发工作的进度,又可以根据已保存的、不同版本的源代码,按需恢复到某一个特定的版本。

Git 的特点:

  • 作为一款免费的开源工具,它支持签入、合并、标签、提交、分支等多种版本控制类型的操作。
  • 提供诸如 Github 或 Bitbucket 的托管库,可供最多五名团队成员免费、且无限地使用。
  • 易于学习,可以通过 Git 将分支源代码轻松地合并到一起。

3.Nagios

Nagios 是最受欢迎的免费开源 DevOps 监视工具之一,它能够通过实时地监控基础架构,来轻松地识别各种安全威胁,检测不同的中断与错误。另外,Nagios 也能够提供图形化的报告。

Nagios 的特点:

  • 不但免费开源,而且提供各种附加的组件。
  • 简化了基于代理和无代理,这两种服务器的监控方法。
  • 能够监控 Windows、UNIX、Linux 和其他 Web 应用程序。
  • 提供多种版本的子工具,其中包括:
    • Nagios Core – 命令行工具。
    • Nagios XI – 基于 Web 的 GUI。
    • Log Server – 使用自动化的警报方式来搜索日志数据。
    • Nagios Fusion – 可用于同时进行多个网络的监控。

4.Splunk

通过向 DevOps 团队提供智能化的操作,Splunk 能够获取各类实用的机器数据,进而提高公司的生产力、竞争力和安全性。

Splunk 的特点:

  • 通过对计算机生成的数据进行以数据为驱动的分析,进而提供各种可行性的洞见。
  • 能够针对 IT 服务提供更为集中化的视图。
  • 能够通过快速的检测模式,来突显异常和受影响的区域。

5.Docker

作为在 DevOps 领域使用最为广泛的容器化开发工具,Docker 为云服务原生的、和那些遗留的应用,提供了独立于平台的集成化容器。它能够在确保安全性的基础上,实现敏捷式的操作。

Docker 的特点:

  • 能够轻松地实现应用程序的自动化部署,并能够简化分布式的开发。
  • Google Cloud 和 AWS 均能够提供对 Docker 的内置支持。
  • Docker 容器不但能够支持虚拟机的环境,并且与平台无关。

6.Kubernetes

Kubernetes 是大型团队常用的一款 DevOps 工具。它能够基于 Docker 的容器化,来实现构建,并能够通过逻辑分类对容器进行分组。

Kubernetes 的特点:

  • 可以通过自动分发,来部署多台计算机。
  • 是第一款容器编排类工具。
  • 在简化大型团队所开发的复杂项目时非常实用。

7.Ansible

由 YAML 编写的 Ansible,是一款针对无代理设计的管理和组织工具。DevOps 团队可以使用它来更加轻松地扩展自动化的流程,并提高生产率。

Ansible 的特点:

  • 基于主从的架构。
  • 其编排模块被设计为 Playbook。
  • 非常适合管理复杂的部署,并能够加快开发的过程。

8.Vagrant

作为一款流行的 DevOps 工具,Vagrant 可以与其他管理类工具结合使用,以实现在同一工作流程中创建虚拟机的环境。如今,许多组织都开始使用 Vagrant,来实现向 DevOps 文化的转换。

Vagrant 的特点:

  • 可以与包括 Windows、Linux 和 Mac 在内的不同操作系统一起使用。
  • 可以轻松地与 Chef、Puppet、Ansible 等 DevOps 工具集成使用。

9.Gradle

Gradle 是一款功能极为丰富的 DevOps 工具。其用户可以使用 C ++、Java 和 Python 等语言来编写代码。各大流行的 IDE(如:Netbeans、Eclipse 和 IntelliJ IDEA) 都能够支持它。

Gradle 的特点:

  • 其核心模型是基于任务 - 动作、输入和输出的。
  • 使用基于 Groovy 的 DSL、以及基于 Kotlin 的 DSL 来描述构建。
  • 其增量式构建能够节省用户大量的编译时间。

10.Chef

Chef 是一款比较流行的、基于 Ruby 的编排管理工具。它主要被用于检查配置,以及自动化基础架构。

Chef 的特点:

  • 有助于实现持续标准化,并能​​加强配置。
  • 通过自动化整个过程,以确保系统配置的正确性。
  • 能够确保配置策略的灵活性、可读性和可测试性。

11.Worksoft

作为另一种流行的 DevOps 工具,Worksoft 可以为 Web 和云端应用程序提供各种支持。它具有一套完备的生态系统,适用于那些横跨整个持续交付流程的各类企业级应用。

Worksoft 的特点:

  • 能够将 UI 和端到端的测试,集成到 CI 的管道中,进而加速整个流程。
  • 允许大中型企业创建基于风险的持续测试管道。这些管道可以被导入应用程序的生产环境,以实现可扩展性。
  • 提供与各种第三方解决方案的集成,以方便用户选择适合自身需求的工具,并在整个 DevOps 的发布周期中无缝地管理各项任务。

12.Puppet

Puppet 是一款可用于部署、配置和管理服务器的开源工具。

Puppet 的特点:

  • 它提供了主从的结构。
  • 可以在混合基础架构和应用程序中流畅运行。
  • 与 Windows、Linux 和 UNIX 操作系统相兼容。

由 Technavio 进行的最新研究 (https://www.technavio.com/report/global-it-spending-region-and-industry-devops-platform-market)显示:从 2016 年到 2020 年,全球 DevOps 市场的复合年增长率 (CAGR,Compound Annual Growth Rate) 已高达 19%。这足以突显全球各类企业对于实施 DevOps 的热情。为了确保 DevOps 流程的成功实施,我们必须制定可靠的 DevOps 策略,并选择与现有开发环境相匹配的 DevOps 工具。而面对当前市场上林林总总的 DevOps 工具,我们逐一进行配置、测试、以及试验显然是相当耗费时间的。希望您能够将上述所列举的 12 种 DevOps 工具收入自己的工具谱中,以便按需进行选用。

原文标题:Top 12 DevOps Tools for Your DevOps Implementation Plan,作者:Mitul Makadia

【51CTO 译稿,合作站点转载请注明原文译者和出处为 51CTO.com】