DevOps革命终于走向主流,DevOps工具热度直线上升。根据谷歌趋势,“devops工具”的搜索量正在稳步增长,并将继续增长。由于DevOps涵盖整个软件开发周期,因此有许多工具可供选择。当然,没有一种工具适合所有情况。但是有几种工具足够成熟,可以为几乎任何情况提供广泛的支持。成功且成熟地采用DevOps方法,您将始终拥有一个完整的管道,其中包括五个类别的工具。请记住,有必要评估当前的工具堆栈,以确保没有丢失CI/CD管道的关键元素。开发和构建工具这是CI/CD管道堆栈的基础,一切都从这里开始。此类别中最好的工具可以协调多个事件流并与外部工具轻松集成。软件开发生命周期中的工具分为三个子类:源控制管理(SCM)持续集成(CI)数据管理2020年推荐的源控制管理(SCM)技术是GIT,所以SCM工具必须有优秀的GIT支持;对于持续集成(CI),在临时容器化环境中运行和执行构建的能力;对于数据管理,能够更改数据库模式并使其与应用程序版本保持一致。1.SCM+CI工具:Gitlab和Gitlab-CI来源:unsplashGitlab无疑是最伟大的开发和维护周期工具,在可预见的未来它将成为创新的领导者。它的核心功能提供了一个完善的GIT存储库管理工具,其基于Web的用户界面易于使用。Gitlab免费提供您需要的一切,它以SaaS和On-Prem格式提供。市面上有很多SCM工具,但都没有像Gitlab那样将“持续集成”直接集成到仓库中。在你的代码库的根目录中粘贴一个名为.gitlab-ci.yml的文件,任何GIT事件都会根据定义的内容触发动作。其优势包括:成熟度:产品从2013年开始上市,非常稳定,支持度高。开源:Gitlab的免费版本并没有削减开发团队需要的核心功能。每个付费层级都提供额外的功能,这些功能可能非常有价值,具体取决于您组织的规模和需求。EmbeddedCI:市面上的其他工具无法将持续集成直接嵌入到SCM中,而Gitlab-CI工具可以。将Docker构建用于临时构建的能力提供了无忧的构建作业,并且内置报告使调试构建失败变得容易,而无需对多种工具进行复杂的集成和编排。无限集成:Gitlab提供每个核心DevOps类别所需的简单集成工具,使任何环境中的开发人员和运维人员都可以使用单一真实来源获取与其应用程序相关的信息。其他工具在这个领域也很流行,但是不如Gitlab。原因如下:GitHub:对于小型和早期开发人员来说,GitHub简直就是一个优秀的SaaS源代码管理系统。但对于需要将IP保留在网络中的大型企业,GitHub唯一的选择是.OVA虚拟机,不支持高可用,难以在on-prem维护,只能运行在中型组织在服务器本身开始崩溃之前。缺少GitHubActions或CI-as-Code意味着您将始终需要携带自己的CI工具并管理该集成,而且它比Gitlab定价贵一点。Jenkins:虽然Jenkins已经成为持续集成工具的默认标准,但它一直缺少源代码控制元素。这意味着你必须一直使用Jenkins和SCM工具,而GitLab提供了这两种功能,这不必要地复杂。BitBucket/Bamboo:它需要两个工具来完成一个Gitlab作业。BitBucketCloud虽然支持Gitlab-CI/GitHubAction功能,但没有公司会轻易采用,本地BitBucket服务器甚至不支持BitBucketpipeline!2.数据管理工具:数据库的自动化需求在FlywayDBweb应用开发中最容易被忽视,通常是新版本应用部署数据库schema变更后才想到的,其schema变更往往会增加或重命名列或表。如果应用程序版本与架构版本不匹配,则应用程序可能会完全崩溃。由于存在两个不同的系统,通过应用程序升级协调数据库更改也很困难,而FlyWayDB解决了所有这些问题。它的主要优点是:数据库版本控制:FlyWay允许简单地创建数据库版本、跟踪数据库迁移以及轻松前滚或回滚模式更改,而无需一些定制解决方案。二进制或内置:您可以选择在应用程序启动时或执行二进制文件时运行Flyway。在您的代码中使用此工具,通过在启动时检查版本功能并进行适当的迁移,使数据库和应用程序版本保持同步。命令行也可以临时运行,为现有数据库提供灵活性,而无需重建整个应用程序。这个领域的工具并不多,只有两个竞争对手值得关注:LiquiBase:如果有人对该工具有更多经验,那么我会非常乐意使用FlyWay对该工具进行标准化。Flocker:这可能只适用于容器化应用程序——在容器中运行数据库非常困难,需要仔细规划才能成功执行。建议对数据库使用RDS等服务,而不是尝试运行存储在容器中的关键数据。自动化测试工具首先将自动化工具安装到测试金字塔中,然后开始对自动化测试工具进行评估。测试有四个方面:单元:这是所有自动化测试的基础。就数量而言,与其他类型相比,单元测试应该是最多的。这些测试应由软件开发人员编写和运行,以确保应用程序的一部分(称为“单元”)符合预期的设计和功能。组件:组件测试的主要目的是验证测试对象的输入/输出行为。这可确保测试对象的功能根据要求的规范正确运行。集成:在测试阶段,将各个软件模块组合起来作为一个整体进行测试。端到端:这一层是不言自明的。从头到尾研究整个应用程序流程,使其按预期运行。1.集成测试工具:CucumberCucumber将规范和测试文档组合成一个有凝聚力的有效文档。由于它们由Cucumber自动测试,因此规格始终是最新的。如果您想开始构建Web自动化测试框架并模拟用户在Web应用程序上的行为,SeleniumWebDriverwithJava和CucumberBDD是在您的项目中学习和实施Cucumber的好方法。它的主要优点是:基于行为驱动开发:Cucumber用于BDD测试,它已经成为一个测试框架(相对于传统的基于测试驱动开发)。有效的文档:记录所做的事情总是一件痛苦的事情。由于您的测试被定义??为代码,Cucumber测试会自动生成文档以进行匹配以确保它们始终保持同步。支持:有很多工具可供选择,但总是需要维修人员提供帮助。Cucumber拥有足够的资金和支持结构来维护该工具多年。这个领域有很多框架和技术专用工具,但只有Cucumber几乎是一个通用的解决方案。在执行端到端测试时,有两个重点领域需要重点关注:功能测试和负载测试。功能测试显然是在测试幻想和实际发生的事情。当点击SPA上的一些页面,填写表格并点击提交时,数据显示在数据库中并且屏幕显示成功。它还需要能够测试在同一场景中工作的x个用户是否可以正确处理它。如果不在这两个方面进行测试,您的CI/CD管道中的差距将是巨大的。1.端到端测试工具——功能:SoapUIPro自从默认的SOAPweb服务以来,SoapUI在API测试领域已经有很长一段时间了。虽然没有构建新的SOAP服务并且该工具的名称没有改变,但这并不意味着它没有发展。SoapUI为构建后端Web服务的自动化功能测试提供了出色的结构。这些可以很容易地与持续集成工具结合,并作为CI/CD管道的一部分运行。它的主要优势是:广泛的文档:这个工具已经存在了一段时间,所以有很多在线资源可以帮助确定如何配置负载测试。易用性:虽然有多种适用的API测试工具,但针对多种服务的一个接口使测试构建变得容易。它的竞争对手是Selenium:Selenium是该领域的优秀工具,在构建和运行基于Java的应用程序时推荐使用。但是,如果您使用多种技术来处理完整的Web应用程序,那么使用非Java语言可能会有点笨拙。2、端到端的测试工具——负载测试:LoadRunner只有LoadRunner才能完成对应用程序各个环节的负载测试。虽然价格昂贵且难以上手,但它是唯一可以执行测试的工具。作为一名技术架构师,我相信新代码将在极端压力下执行。它的主要优势是:广泛的文档:这个工具也已经存在了一段时间,拥有丰富的在线资源。协议支持:从ODBC到AJAX,再到HTTPS以及可能在某处使用的其他模糊协议,负载测试都支持该协议。避免级联多个负载测试工具,这只会增加复杂性。同样,在这个领域没有很多通用的工具,也没有适用于任何环境的简单解决方案。部署工具部署工具可能是应用程序开发中鲜为人知的一个方面。对于运维人员来说,如果不深入了解应用代码和功能,是很难使用部署工具的。而对于开发人员来说,管理代码部署是一项新的职责,他们对很多部署工具几乎没有经验。1.组件管理工具:NexusNexusartifactrepository支持从Java到NPM再到Docker的几乎所有主流技术,你可以使用这个工具来存储所有可部署的artifacts。通过使包更接近构建过程,代理远程包管理器的能力极大地提高了CI配置的速度。这还有一个额外的好处,即拥有跨多个软件项目使用的包的全局视图,锁定可能成为代码中的攻击媒介的不安全开源包。其主要优势有:技术支持:该产品自2013年投放市场以来,一直非常稳定,得到了很好的支持。开源:Gitlab的免费版本并没有删除开发团队需要的核心功能。每个付费层都提供可提供最大价值的附加功能,具体取决于您组织的规模和需求。2.配置管理工具:AnsibleAnsible是这个领域的领导者,原因很简单:无状态。早期的现场配置管理工具侧重于管理配置状态。如果它与所需的配置不同步,将自行修复。新应用程序只有无状态组件。它的主要优点是:无状态:Ansibleplaybook在可操作的机器上运行。我不关心远程对象的状态,使用Packer等工具构建可部署对象要容易得多。开源:与CentOS一样,RedHat也维护着Ansible。该业务及其高级支持人员帮助维护社区并确保高质量、易于使用的模块。分子测试:由于配置管理与任何其他代码一样,不进行测试就无法开始操作。用于测试Ansible角色的Molecular框架无缝工作以确保高质量的代码配置,并遵循与应用程序代码相同的CI/CD管道。YAML:与其他工具相比,YAML更容易上手。一般来说,配置管理对于任何采用DevOps的人来说都是新鲜事物。它的竞争对手如下:OpsCodeChef:作者以Chefcookbook开发者的身份开始了他的开发和维护生涯。Ruby和Chef非常相似,但它们根本无法解决当今无状态、云原生应用程序的问题。对于更传统的应用程序来说,这是一个很好的工具,但本文着眼于未来。Puppet:Puppet从未发展成一个大型社区,尤其是与Chef和A??nsible相比。它非常适合配置和裸机,但不支持Web应用程序类型的配置管理。3.部署工具:TerraformTerraform解决了从网络组件到实际服务器镜像的基础设施,即代码定义。自最初发布以来,它随着时间的推移不断发展壮大,并建立了一个庞大的插件社区和支持社区,以帮助解决您可能遇到的几乎所有部署情况。支持本地环境、云环境或任何其他类型环境的能力是首屈一指的。最后,最新版本在HCL中提供了与任何其他传统编程语言相同的逻辑函数和类,开发人员可以轻松获取和学习。它的主要优势是:云/环境不可知:Terraform利用其代码与所有API和后端逻辑之间的接口,它需要与基础设施提供商进行通信。开源:免费工具也很难获得,而且他们的社区支持是一流的。它的竞争对手是AWSCloudFormation:即使你只在AWS云环境中工作,你也可能会朝着一个未知的方向继续前进,将技能和知识结合到一个平台中可能会有风险。此外,许多新的AWS服务通常在用于CloudFormation之前作为Terraform模块交付。DevOps工具运行任何开发项目的最终目标是在生产环境中运行应用程序。在DevOps世界中,它是关于确保我们能够了解环境中的任何潜在问题,并将人为干预保持在最低限度。选择正确的运行时工具集对于实现开发至关重要。1、工具即服务:AWS亚马逊一直是云计算领域的领导者。他们也不止于此,提供了一系列令人眼花缭乱的新服务供开发人员利用。将任何技术和任何模式引入AWS,它都可以构建和运行。与在您自己的数据中心构建、管理和维护传统硬件相比,它们的成本极其合理。这项免费服务让任何人都有机会在做出购买决定之前尝试一下,这对于尝试以正确的方式构建应用程序非常有用,而不必因为成本而妥协。它的主要优点是:行业标准:如果您有在AWS中构建应用程序的经验,您基本上可以在任何地方找到工作。企业喜欢AWS,初创公司喜欢它的低成本。免费服务:与其他一切相比,这是AWS拥有的一项极其正确的业务。在您决定将数千美元投入可能是一个巨大陷阱之前,请先使用该服务并了解它是如何工作的。它的竞争对手如下:Azure:Azure自发布以来一直在发展。然而,差异化的需求导致了奇怪的命名服务,让人很难理解什么是“云中的文件系统”。尽管.NET代码在Microsoft生态系统中运行得更好,但不可能在应用程序的每个方面都只使用.NET。Heroku:除了我在Heroku上的个人项目,我不运行任何项目。它不是很透明,企业没有理由将其用作平台。这非常适合在博客中演示内容,但对于实际应用程序不是很友好。2.编排工具:OpenShift您可能在应用程序堆栈的某个地方使用了Docker或容器。尽管无服务器应用程序很棒,但它们并不适合所有架构模式。在没有编排平台的情况下运行容器根本行不通。从安全和工具的角度来看,CoreKubernetes带来了很多需求。OpenShift是唯一具有Source2Image构建、pod部署自动化,甚至可追溯性和监控功能的Kubernetes平台。它可以在本地、云端或两者中运行。它的主要优点是:内置安全性:管理K8s安全性几乎需要博士学位。OpenShift默认采用的安全机制减少了开发人员的工作量,并为他们的应用程序提供了一个更安全的平台。多合一解决方案:与默认情况下不包含负载均衡工具的基本K8s不同,OpenShift拥有一切。您可以使用它来托管容器、构建容器、运行CI/CD工具、编排外部流程、管理机密等。虽然GUI仍然需要做更多的工作,但API优先的方法意味着一切都可以编写,并且与K8的其他GUI不同,它使学习Kubernetes的基础知识变得更加简单,而无需优先考虑该学位!它的主要竞争对手是DockerSwarm:Dockerswarm试图通过删除很多东西来简化K8s。这对较小的应用程序非常有效,但对企业应用程序根本不起作用。此外,AWSECS等服务采用类似的方法,但更易于用于其他交互服务(Lambda、IAM等)。3.监控工具:NewRelicNewRelic的早期版本成功实现了APM监控。现在,它是一套完整的监控工具,可以监控服务器性能、容器性能、数据库性能、终端用户体验监控,当然还有APM监控。它的主要优点是:易用性:作为一名系统工程师,我使用过很多监控工具,但没有一个像NewRelic那样好用。这是一种软件即服务(SaaS),不需要设置服务器组件,非常方便。端到端可见性:其他工具试图监控应用程序的特定方面。无论是CPU利用率还是网络流量,这些都共同作用以保持应用程序运行。NewRelic使您能够汇集所有数据并真正了解正在发生的事情。它的竞争对手如下:Zabbix:Zabbix是我最喜欢的第一个监控系统,但是它无法发展到云原生版本,APM空间已经滞后于它的发展。不过,它在监控传统服务器基础设施方面做得很好。DataDog:该工具过于关注管理生产应用程序的过程而忽略了代码本身。在生产中有开发人员的DevOps团队中,无需依赖繁琐的工具来提供顶级支持。4.日志工具:Splunk他们长期以来一直是日志聚合领域的领导者,并将继续努力做到最好。通过本地和SaaS产品,它可以在任何地方使用。它的主要缺点是运行起来很昂贵。它的主要优势是:行业标准:企业喜欢使用Splunk,而且他们有钱购买。虽然初创公司可能难以支付其成本,但许多概念和技能可以转移到开源替代方案中。可支持性:它有很多默认设置和开箱即用的功能,所以你不必花很多时间阅读文档和尝试使用一些没有明确说明的东西。它的主要竞争对手是ELKStack:ElasticSearch、LogStash和Kibana似乎很受欢迎,因为它们不收取使用费,但随着日志集的增长和越来越多的应用程序在工具中的使用,它们确实变得越来越难维护。与使用Splunk相比,在构建任何类型的仪表板之前,您将花费更多时间来设置该工具。协作DevOps工具DevOps首先是组织内的文化变革。虽然购买工具不会在一夜之间改变文化,但它肯定有助于培养与同事合作的新方式。1.问题跟踪工具:Jira尽管这个领域的竞争越来越激烈,但Jira仍然保持着领先地位。但是Jira内置的强大灵活性允许开发和运营团队管理他们的项目工作和冲刺任务,并且使用敏捷术语的内置标准有助于缓解从传统工作方法到更精益流程的文化转变。它的主要优势是:行业标准:与许多工具一样,Jira几乎无处不在。小型团队可以使用便宜的许可证并获得他们需要的一切,而企业可以为任何人提供许可证。集成:成为该领域的领导者并快速发展意味着第三方工具将选择首先构建原生集成,并且它们只会为工具增加价值,Jira就是这种情况。可以与现有列表中的所有其他工具集成,几乎不需要定制。它的竞争对手包括:Trello:Trello作为一种免费使用的看板工具迅速流行起来。但是当你从几十个问题扩展到数千个问题时,Trello变得难以控制、搜索和报告。PivotalTracker:当我在初创公司工作时,我非常喜欢这个工具。但他们更关注产品管理而不是技术任务。尽管通过Jira进行产品管理更加困难,但无需购买完全独立的工具即可完成该过程。2.聊天操作工具:MatterMost这可能是2020年榜单上最大的惊喜。MatterMost使用过去最好的工具,引入本地部署,并广受欢迎。为企业带来巨大好处,因为它可以控制数据并促进与本机工具的集成。它的主要优点是:开源:MatterMost的开源版本非常适合小型或大型团队。不同的是,在Slack的免费服务中,如果你丢失了历史记录,运行服务器意味着找回数据。集成:由于API几乎100%基于SlackAPI,几乎所有Slacks集成都直接与MatterMost一起工作。它的竞争对手主要有以下两个:Slack:Slack确实不错,但是发展很快,需要开始扭亏为盈。他们业务的付费阶段即将到来,Slack曾经免费提供的许多功能现在都需要付费,包括聊天记录。MicrosoftTeams:祝你在尝试将Microsoft产品与非Microsoft本机产品集成时好运。3、文档工具:无论Confluence使用哪种工具,都很难创建和维护高质量的技术文档。尽管最近市场上出现了许多SaaS文档工具,但与第三方一起存储关键应用程序的敏感技术文档是不可接受的。数据和文档需要保存在本地,这正是Confluence的用武之地。它的主要优点是:易于管理:大多数自托管工具的启动可能有些复杂,并且需要一些特定的知识才能大规模运行和维护它们。开箱即用的Confluence服务器可以适合10或10,000个用户。插件:虽然使用默认集成功能创建美观、易于浏览的文档很不错,但拥有几乎所有内容的插件功能可以释放wiki的潜力。它的竞争对手如下:阅读文档:非常适合开源公共代码,但从未考虑过存储关键的应用程序知识。MarkDown:虽然非常适合记录有关代码的内容,但很难将架构、程序或其他类型的文档直接放入MarkDown格式。Jekyll:在记录技术知识时,每次有变化都想新建一个静态站点来部署。简单的Confluence版本管理系统使内部文档更易于处理。市场上有数百种DevOps工具,浏览以筛选应使用哪些工具以及应何时执行已成为一种趋势。按照本指南为完整的CI/CD管道选择DevOps工具堆栈。关键是要记住,自动化一切!
