贤时间 2020-07-06
开发运维改革终于成为主流,人们对开发运维工具的欢迎程度暴增。根据谷歌趋势的显示,“开发运维工具”的搜索量稳定增长,且会继续保持增长。
由于DevOps包括整个软件开发周期,可供选择的工具很多。当然啦,没有一种工具能适合所有情况。但有几种工具的性能已经成熟,可以为几乎所有情况提供广泛的支持。
成功且成熟地采用开发运维方法,你将始终拥有完整的渠道,这包括适用于五个类别的工具。记住,评估当前的工具堆栈很有必要,确保没有丢失CI/CD管道的关键内容。
开发和构建工具
这是CI / CD管道堆栈的基础,一切始于此。该类别中最好的工具可以协调多个事件流,并且可以轻松地与外部工具集成。软件开发生命周期中的工具分为三个子类别:
2020年推荐的源代码控制管理(SCM)技术是GIT,因此SCM工具必须具有出色的GIT支持;对于持续集成(CI),需要具备在临时容器化环境中运行和执行构建的能力;而对于数据管理,需要能够对数据库架构进行更改并使它与应用程序版本保持一致的能力。
1. SCM + CI工具:Gitlab和Gitlab-CI
Gitlab无疑是最伟大的开发运维周期工具,且它将在可预见的未来成为创新引领者。其核心功能提供了完美的GIT存储库管理工具,它基于网络的用户界面且易于使用。Gitlab可免费提供所需的一切,并且具有SaaS和On-Prem两种形式。
市场上有很多SCM工具,但是没有一种工具像Gitlab那样将“持续集成”直接集成到存储库中的。将一个名为.gitlab-ci.yml的文件粘贴在代码库的根目录中,任何GIT事件都会根据定义的内容触发操作。
其优点包括:
其他工具在该领域也很流行,但是它们不如Gitlab。原因如下:
GitHub Actions或CI-as-Code的缺乏意味着始终需要带上自己的CI工具,并管理该集成,而且它比Gitlab定价要贵一些。
2. 数据管理工具:FlywayDB
网络应用程序开发中最容易忽视数据库的自动化需求,通常是对应用程序的新版本部署数据库架构更改的事后思考,其模式更改通常会添加或重命名列或表。如果应用程序版本与架构版本不匹配,该应用程序可能会完全损坏。
由于存在两个不同的系统,因此通过应用程序升级来协调数据库更改也比较困难,而FlyWayDB解决了所有这些问题。
其主要优势在于:
该领域没有很多工具只有两个竞争对手可以看看:
自动化测试工具
首先将自动化工具安装到测试金字塔中,进而开始对自动测试工具进行评估,测试有四个方面:
1. 集成测试工具: Cucumber
Cucumber将规范和测试文档合并为一个紧密结合的有效文档。由于它们是由Cucumber自动测试的,因此规格总是最新的。
如果要开始构建网络自动化测试框架,并模拟网络应用程序上的用户行为,具有Java和Cucumber BDD的Selenium WebDriver是在项目中学习和实现Cucumber的好方法。
其主要优势在于:
该领域有许多框架和特定技术的工具,但是只有Cucumber几乎是万能的解决方案。
端对端测试工具
进行端到端测试时,有两个重点领域需要关注:功能测试和负载测试。
功能测试显然是在测试幻想发生且实际发生的事情。当单击SPA上的某些页面,填写表格并单击提交时,数据显示在数据库中,并且屏幕会显示成功的字样。
还需要能够测试在相同场景下工作的x数量的用户是否可以正确处理。如果在这两个方面都没有进行测试,CI / CD管道中的差距将很大。
1. 端到端测试工具—功能:SoapUIPro
自默认SOAP网络服务开始,SoapUI进入API测试领域已有很长时间了。虽然不再构建新的SOAP服务,也没有更改该工具的名称,但这并不意味着它没有发展。
SoapUI为构建后端网络服务的自动化功能测试提供了一种出色的结构。这些可以轻松地与持续集成工具结合,并作为CI/CD管道的一部分运行。
其主要优势在于:
其竞争对手有Selenium:Selenium是该领域的出色工具,建议在构建和运行基于Java的应用程序时使用。但如果正在使用多种技术来处理一个完整的网络应用程序,使用非Java语言可能会有些笨拙。
2. 端到端测试工具—负载测试:LoadRunner
只有LoadRunner才能完成对应用程序各个方面的负载测试。虽然价格昂贵而且入门有些困难,但它是唯一可以执行测试的工具。作为一名技术架构师,笔者相信新代码将在极端压力下执行。
其主要优势在于:
同样,该领域并没有很多万能的工具,简单的解决方案是可以在任何环境中使用。
部署工具
部署工具可能是应用程序开发中鲜为人知的方面。对于操作人员来说,如果不深入了解应用程序代码和功能,就很难使用部署工具。而对于开发人员来说,管理代码部署是一项新的职责,他们很少有使用许多部署工具的经验。
1. 构件管理工具: Nexus
Nexus工件存储库支持从Java到NPM再到Docker几乎所有主要的技术,可以使用这一工具来存储所有可部署的工件。
通过使软件包更接近构建过程,代理远程软件包管理器的能力大大提高了CI配置的速度。这样做的另一个好处是可以全局查看跨多个软件项目用途的软件包,从而锁定不安全的开源软件包,这可能是代码中的攻击媒介。
其主要优势在于:
2. 配置管理工具: Ansible
Ansible是这个领域的引领者,原因很简单:无状态。早期的现场配置管理工具着重于管理配置状态。如果它与所需的配置脱离同步,将自行修复。新的应用程序只有无状态组件。
其主要优势在于:
其竞争对手有以下两个:
3. 部署工具:Terraform
Terraform解决了从网络组件到实际服务器图像的基础架构,即代码定义问题。自最初发布以来,它已经发展了一段时间,并建立了庞大的插件社区和支持社区,为可能遇到的几乎所有部署情况提供帮助。支持本地环境、云环境或其他任何类型环境的能力是首屈一指的。
最后,与任何其他传统的编程语言一样,最新版本在HCL中提供了相同的逻辑功能和类,开发人员可以轻松获得和学习。
其主要优势在于:
其竞争对手有AWS Cloud Formation:即使仅在AWS云环境中工作,你也可能会向未知的方向继续前进,将技能和知识整合到一个平台中可能会有风险。另外,许多新AWS服务通常在用于CloudFormation之前作为Terraform模块提供。
开发运维工具运行
任何开发项目的最终目标都是在生产中运行应用程序。在开发运维领域中,要确保我们对该环境中的任何潜在问题具有可见性,并且将人工干预降至最低。选择正确的运行时工具集对于实现发展至关重要。
1. 工具即服务:AWS
亚马逊一直是云计算领域的引领者。它们也不仅止步于此,还提供了许多新服务供开发人员利用,让人眼花缭乱。将任何技术和任何模式带到AWS上,它就可以被构建和运行。
与在自己的数据中心中构建、管理和维护传统硬件相比,它们的成本极其合理。免费服务使任何人都有机会先进行尝试,再做出购买决定,这对尝试以正确的方式构建应用程序非常有用,而不是因为成本而不得不妥协。
其主要优势在于:
其竞争对手有以下几个:
2. 编制工具:OpenShift
你可能在应用程序堆栈中的某处使用了Docker或Container。无服务器的应用程序虽然不错,但不能适应所有架构模式。在没有业务流程平台的情况下运行容器根本行不通。
从安全性和工具角度来看,Core Kubernetes带来了很多需求。OpenShift是唯一的Kubernetes平台,它具有Source2Image构建,pod中的部署自动化,甚至有可追溯性和监视功能。它可以在本地,云中或同时在两者中运行。
其主要优势在于:
其主要竞争对手是Docker Swarm:Dockerswarm试图删除很多东西来简化K8。这对于较小的应用程序非常有用,但对于企业应用程序根本不起作用。此外,AWS ECS之类的服务采用了类似的方法,却使正在交互的其他服务(Lambda、IAM等)使用起来更简单。
3. 监控工具: NewRelic
New Relic的早期发行成功地实现了APM监控。现在,它是一套完整的监控工具,可以监控服务器性能,容器性能,数据库性能,以及进行最终用户体验监控,当然还有APM监控。
其主要优势在于:
其竞争对手有以下几个:
4. 记录工具: Splunk
他们长期以来一直是日志聚合的领跑者,并且会继续努力做到最好。借助本地和SaaS产品,可以在任何地方使用它。它的主要缺点是运行的成本很高。
其主要优势在于:
其主要竞争对手是ELKStack:ElasticSearch、LogStash和Kibana似乎很受欢迎,因为它们不收取使用费用,但随着日志集的增多以及工具中越来越多的应用程序,确实会变得更加难以维护。与使用Splunk相比,在构建任何类型的仪表板之前,你会花更多的时间来设置工具。
协作开发运维工具
开发运维首先是组织内部的文化变革。虽然购买工具不会一夜之间改变文化,但无疑可以帮助培养与同事合作的新方式。
1. 问题跟踪工具:Jira
尽管该领域的竞争日益激烈,但Jira仍然保持领先地位。但Jira内置的强大灵活性使开发团队和运营团队可以管理其项目工作和冲刺任务,使用敏捷术语的内置标准有助于缓解从传统工作方法到更加精益的流程的文化转变。
其主要优势在于:
其竞争对手有以下几个:
2. 聊天运营工具:MatterMost
这可能是2020年清单上最大的惊喜。MatterMost使用了以前最好的工具,引入了本地部署,获得了广泛的欢迎。对于企业来说是巨大的好处,因为它可以控制数据,还有助于与本地工具集成。
其主要优势在于:
其竞争对手主要有以下两个:
3. 文档工具:Confluence
无论使用哪种工具,都很难创建和维护高质量的技术文档。尽管最近有许多SaaS文档工具进入市场,但将关键应用程序的敏感技术文档存储给第三方这一点让人难以接受。需要将数据和文档保留在本地,这就是Confluence的作用。
其主要优势在于:
其竞争对手有以下几个: