DevOps是一种文化理念、流程和工具的组合。它可以在保证产品卓越质量的同时,提高组织交付软件的能力,以便更好地为客户提供服务,并在市场上抢占竞争优势。DevOps通过让开发和IT运营团队实现自动化与集成化工作,协助他们快速、高质量且可控地构建、测试、部署和监控应用程序。可以说,在整个软件的开发生命周期(SDLC)阶段,它能够实现各项任务的自动化执行,减少错误,消除瓶颈,以及减少不必要的返工。
什么是DevOps工具链?
DevOps的成功实施,往往依赖一组集成化的工具链。此类工具链能够在整个系统开发的生命周期中,自动化地执行设计、构建、测试、交付、部署、管理、以及控制软件应用等任务。它能够通过实现包括持续集成、持续交付、自动化协作与编排等关键性的DevOps原则,支持开发、运营、以及安全团队之间的异步协作,无缝地集成DevOps工作流,进而更快、更高效地交付出产品。
DevOps工具链的商业优势
1.快速高效的部署
如今,软件公司往往需要实现每天数次的部署与更新。这对于DevOps团队来说是一种挑战。借助DevOps工具链,DevOps团队可以将自动化集成到软件开发生命周期的每个阶段,从而以更高质量和更快效率的方式部署产品。据此,软件公司可以确保每隔数小时进行一次的部署,而非过去的每周仅部署一次。
2.事件管理
及时的事件响应能够确保业务的连续性。如今,企业不应担心“是否”会发生事故,而需要考虑的是“何时”出现问题。因此,它们必须准备好快速、有效地响应和解决事故的流程,以防止业务的中断。
DevOps工具链可以优化您的事件响应策略,自动化事件管理的大部分初始过程,进而加速解决的效率,并缩短停机时间。同时,工具链还可以通过接收和分析来自所有受影响系统的数据,有效地协助创建事件报告。
3.提高软件质量
软件错误与问题往往会阻碍软件的开发过程,拖延发布的时间。因此,项目团队往往需要具备小时级的、快速准确的问题识别和修复缺陷的能力。而DevOps工具链可以协作DevOps团队,主动地识别应用程序的问题,根据问题的严重程度,对其进行优先级排序,进而逐步修复问题。
4.工作流程自动化
2019年,在Evans Data Corp的DevOps与云调查中,针对工作流的管理工具,IT经理会偏好收集与分析端到端的业务数据;而开发人员会强调构建可视化的、能够操控数据的仪表板。借助DevOps工具链,项目团队既可以自动化地实时捕获数据,又能够按需准确、无缝地访问与分析所需的数据。
5.安全性
安全性往往是悬在业务目标头上的“达摩克利斯之剑”。不过,许多组织一直未能就“谁负责安全”达成共识,这直接导致了数据意外泄露、与业务攻击事件的频发。而DevOps工具链可以给技术团队带来持续监控、合规、数据加密、以及事后审查报告等,组织级别的安全态势。
如何构建强大的DevOps工具链?
强大的DevOps工具链在加速DevOps优势方面,发挥着至关重要的作用。DevOps工具链必须遵循组织级别的方法,跨越所有团队、业务、流程、系统和应用程序。此外,它必须结合对于每种工具如何优化,以及加强DevOps生态系统中其他工具的洞见。
虽然DevOps工具链并没有放之四海皆准的统一标准,但它们往往涉及到包含由版本控制、代码质量和持续集成等底层的最佳实践和流程。在工具的选择时,项目团队应考虑诸如:迁移策略、可扩展性、开源性和许可证成本等因素。通常,我们可以从版本控制和配置管理等基础领域开始,逐步采用持续交付、部署和监控等其他DevOps实践类工具。
多合一的DevOps工具链
多合一的DevOps工具链提供了标准的、完备的产品,您可以根据自己的需求进行选择。对于刚开启DevOps之旅的组织、或旨在快速启动项目的团队而言,这是一种最佳的选择。那些预先编排好的工具集,能够促进更高的标准化和命名资源的集成。不过,这些多合一的工具链也可能无法与团队现有的遗留工具进行完美的集成,甚至造成潜在的阻碍。
可定制的DevOps工具链
另一种方法是选择按需定制的工具集,并通过谨慎的编排,以集成到团队现有的DevOps管道中。这种类型的工具链可以防止团队被工具或供应商锁定。不过,自定义的DevOps工具链可能需要大量的管理资源与标准化的投入。
创建DevOps工具链的注意事项
为了创建实用的DevOps工具链,组织需要考虑如下四个主要方面:
保持相关性
随时了解DevOps生态系统中的最新趋势和创新。团队可以去主动了解行业内的成功案例,并在不同的技术社区,与他们互动交流与学习。
分析
分析和评估当前的软件开发过程及使用的工具,包括每个SDLC阶段需要的时长、准确性、及其效率。这将协助团队识别当前系统中的漏洞和混乱的流程。
构建
一旦确定了当前系统中的漏洞,团队就需要通过选择工具,来对系统进行必要的修改。同时,他们在将理论知识付诸实践的过程中,也需要构建出各种工具链的原型。
可扩展
为了在当今瞬息万变的IT市场中占有优势,企业应当能够按需进行无缝的调整和扩展。为此,团队需要长远地规划DevOps工具链,通过不同的策略来支持持续的维护、升级、定期配置、并能应对各种不确定性。
DevOps工具的类别
项目管理工具
项目管理工具能够帮助团队编制满足客户项目需求的代码库,将它们划分为更小的任务,并持续监控任务,直至完成。这些工具支持诸如Scrum、精益(Lean)和看板(Kanban)等敏捷项目管理的实践。该领域的流行开源工具包括:GitHub Issues和 Jira。
源代码存储库
版本控制类工具可以方便多名开发人员,同时在同一个代码库上工作。此类代码存储工具往往通过与CI/CD、安全性和测试工具相集成,以便代码在提交到存储库时,能够自动被移至下一步。该领域的流行开源工具包括:GitHub和GitLab。
CI/CD管道
持续集成和部署工具能够自动化代码的构建、测试和部署。该领域的流行开源工具包括:市场上最富盛名的Jenkins和Kubernetes原生的CI/CD工具--Argo CD。
自动化测试框架
自动化测试框架包含各种用于自动化全部测试过程的软件工具、库和程序。其中包括单元测试、功能测试、合约测试、可用性测试、性能测试、渗透测试和安全测试等。此类工具大多能够支持多种语言,有些甚至可以利用人工智能,来自动重新配置测试的流程,以响应代码的更改。当然,此类测试工具往往比较昂贵。该领域的流行开源工具包括:Selenium、Katalon、Appium、Serenity和Robot Framework。
配置管理工具
配置管理工具有助于将基础设施作为代码进行管理,从而避免了因跨环境而带来的配置更改。通过执行脚本,此类工具允许DevOps团队配置和提供完全版本化和文档化的基础设施。该领域的流行工具包括:Chef、Puppet、Ansible和Terraform。
监控工具
监控工具可以通过实时地收集和分析数据,深入了解代码更改是如何影响应用程序性能的,进而帮助DevOps工程师检测和纠正系统中的问题。该领域的流行开源工具包括:Data dog、Nagios、Prometheus和Splunk。
持续反馈工具
此类工具通过热图(分析用户的活动)、自助式问题反馈单或调查等各种渠道,收集用户的反馈,进而协助DevOps工程师解决问题,并提高相应的产品质量。
工件存储库
工件存储库存储着所有待更新或更改的“重(heavy)”二进制工件文件。它们是使用内、外部源代码存储库开发出的各种库、DLL和二进制文件的集合。该领域的流行工具包括:JFrog Artifactory和Nexus Repository。
问题跟踪工具
在软件开发生命周期中,清晰的透明度可以为DevOps团队提供深入的见解。而问题跟踪工具可以协助他们对问题进行编录和跟踪,并以更高效的响应速度去快速解决问题。
协作和沟通工具
DevOps文化的精髓在于不同团队之间的无缝协作和沟通。而协作和沟通工具就能够突破开发、测试、运营团队的位置与时区的障碍,开展流畅的协调和协同工作。该领域的流行工具包括:Slack、Campfire和Skype。
规划工具
规划工具可以根据整个组织的业务目标,为利益相关者、客户和与不同团队提供所需的透明度,以协助各方制定冲刺计划。该领域的流行工具包括:Asana和Clarizen。
编排工具
编排是确保自动化工作流实现构建、测试、交付和部署的软件应用。此类工具既可以由内部开发团队安装和管理,又可以让外包团队基于SaaS(软件即服务)来实现。该领域的流行工具包括:CircleCI、AzureDevOps和Jenkins。
源代码管理
每个组织都需要通过一个集中化的存储位置,来存放包括数据、文档、代码、配置和文件在内的所有关键资产。源代码控制工具不但可以实现该需求,还能够将数据分类到不同的分支上,以供团队的使用。该领域的流行工具包括:SVN、Git和Subversion。
数据库工具
数据库管理工具能够方便组织轻松地管理,由各个应用程序开发和处理所产生的大量有价值的数据。该领域的流行工具包括:Razor SQL和Team Desk。
学习和掌握优秀DevOps工具列表
目前,业界有各种付费和开源的DevOps流行工具可供选择:
1.Docker
作为DevOps团队最常用的DevOps工具,Docker在DevOps生态系统中已广受欢迎。据Forrester统计,它早在2018年第四季度就已主导了企业容器平台的市场。Docker是一个基于Linux的开源工具,且支持容器化。据此,团队开发出的软件能够与其依赖项一起被打包,作为一个整体单元交付,进而消除了单独管理依赖项的繁琐。Docker不但具有可移植性、安全性和与其他语言的兼容性,而且能够与诸如:Ansible、Jenkins和Bamboo等工具无缝集成。
2.Ansible
作为软件自动化领域的DevOps“宠儿”,Ansible以其自动化优势而闻名。它通常被用于自动化软件的添置、配置管理和应用程序部署。同时,开源的Ansible凭借着其无需代理、以及使用YAML语言编写简单语法的特性,方便了系统管理员轻松地处理各种复杂的部署。
3.Git
这款开源的DevOps工具能够使得DevOps工程师轻松地跟踪开发工作的进度,并协调彼此之间的工作。通过Git,开发者不但可以恢复到以前保存过的工作版本,而且能够在适当的时候单独创建分支,并添加新的功能。不过,组织需要为其工作托管一个诸如GitHub的存储库。目前,Git已经成为最受欢迎的DevOps工具之一。亚马逊、微软和Facebook等科技巨头都在使用它。
4.Puppet
作为开源的DevOps工具,Puppet通过其数千个代码模块,方便DevOps团队管理与自动化各种软件检查、交付和操作。同时,它可以与许多工具无缝集成。不过,免费版的Puppet工具仅适合小型项目。针对大型项目的Puppet Enterprise则可以使团队拥有更多的资源和代码。
5.Chef
作为最强大的开源配置管理工具之一,Chef允许开发人员将基础架构修改为代码,以实现轻松地管理各类数据、属性和角色等。与Puppet类似,Chef也可以支持多个平台,并能够与基于云端的平台实现无缝的集成。无论基础设施的规模如何,Chef都可以自动化基础设施的配置,应用程序的部署,甚至管理整个网络的配置。
6.Jenkins
具有快速高效的代码检错能力的Jenkins,不但可以自动化开发团队的交付管道,而且能够为DevOps工程师近乎实时地测试和报告代码中的更改。由于拥有上千个插件的庞大生态系统,因此Jenkins不但可以与市场上几乎所有可用的DevOps工具相集成,而且能与Linux、Windows和Mac OS X等系统相兼容。
7.Nagios
作为DevOps领域最受欢迎的监控工具之一,免费开源的Nagios能够协助识别和纠正网络与基础设施中的各种问题。DevOps团队不但可以用它来监控应用程序、服务和网络协议等方面的状态,而且能够记录各种中断和故障等事件。目前市场上有Nagios Core和Nagios XI两个版本。其中,最新版本的Nagios XI提供了更多的新功能。当然,这两个版本都有相应的论坛支持。
8.Splunk
Splunk能够让团队中的每个成员轻松地访问和使用到目标主机上的数据和日志。据此,DevOps工程师可以快速地分析和可视化机器数据,并通过获悉洞察力,来提高生产力和效率。开发人员既然可以开发自定义的Splunk应用,又能够并将Splunk数据集成到其他应用程序中。
9.Bamboo
由Atlassian于2007年开发的Bamboo,是一种广泛被使用的持续集成和部署工具。它会将自动化构建、测试和发布集成到单个工作流中。虽然与Jenkins具有相似之处,但是Bamboo并不是一款开源的DevOps工具。通过它,开发人员能够自动开发、集成、测试源代码,以及部署应用程序。此外,Bamboo的独特功能还包括:易用的图形化用户界面,自动化完成,与各种工具的集成,以及预构建等能力。
10.ELK Stack
Elasticsearch、Logstash和Kibana三种DevOps开源工具的组合被称为ELK Stack。其中,Elasticsearch是一个搜索和分析类引擎,Logstash会从各个来源收集数据,并由Elasticsearch存储,而Kibana是一个可视化层次。ELK Stack可以被用于集中各种日志记录。它不但具有多个插件,而且拥有一个活跃的支持社区。
11.Kubernetes
该容器编排平台发布于2015年,可以帮助团队轻松地管理大量容器。在将容器化应用程序部署到一组服务器上后,Kubernetes会自动进行分发和调度。当然,Kubernetes 只是一个编排平台,并非一套完整的解决方案。它必须与诸如Docker等其他工具配合使用,实现开发、分发和运行容器。
12.Selenium
作为著名的自动化Web应用测试工具,开源的Selenium正在被谷歌和IBM等许多财富500强公司所使用。Selenium的独特之处在于,其测试脚本可以采用Python和Java等多种语言编写。它能够与Windows、Mac和Linux等操作系统相兼容,并适用于任何浏览器。为了实现持续测试目的,Selenium应当与Docker和Jenkins相集成。
13.Vagrant
作为一种倍受欢迎的开源DevOps工具,Vagrant可以让开发者、操作员、以及设计师在共享的简单且单独的工作流中,开发和管理虚拟机环境。通过复制生产环境,Vagrant能够方便DevOps工程师在生产过程的早期,识别和修复各项错误。同时,该工具也可以轻松地与Ansible、Chef和Puppet等相集成。
14.Maven
开源的Maven工具主要被用在Java类型的项目中,其主要功能是对自动化构建过程和依赖项进行解析。Maven能够协助编译源代码,运行单元测试和功能测试,并将结果集成到JAR、WAR和RPM等文件包中,进而上传到Nexus或Artifactory等远程数据仓库中。同时,由于该工具是基于项目对象模型的概念开发的,因此Maven会依赖于XML,并带有执行常规任务的预定义指令。
15.Gradle
同样作为DevOps自动化开源工具的Gradle,能够支持采用包括Java、C++和Python等多种语言编写代码。尽管Gradle构建在Apache Ant和Maven之上,但它使用基于Groovy的特定领域语言,来描述构建。自2009年被发布以来,该工具一直在多种项目构建中提供稳健的服务。而且由于能够提供增量式构建、构建缓存和守护进程,因此Gradle比Maven更加高效。
DevOps的编排
DevOps编排对于任何正在或已完成自动化实施的组织来说,都是至关重要的一步。它能够通过协调由DevOps实践进行自动化的所有任务,以提供改进和优化的建议。总的说来,DevOps编排可以提供如下业务优势:
更快的软件交付
快速发布新的功能和结构
最小化部署的时间
降低服务交付的成本
提高产品的可靠性
虽然DevOps编排能够方便分析师、IT经理和QA人员根据自己的兴趣,通过快速实施,在适当的构建和配置级别上,实现完备的产品环境,但是编排在DevOps中并非一蹴而就。团队往往需要通过不断测试和积累经验,才能构建出完全符合其业务目标的编排工具,进而充分利用其自动化,给项目和产品带来深度和广度上的全面转变。