调查表明,DevOps正在提高全球软件开发公司的上市速度、可销售性、创新和产品质量。 而2021年将是DevOps发展的重要一年。由于DevOps涵盖了开发、运营、IT、安全和产品团队,以及软件开发的不同阶段,因此有很多工具可供选择。
以下将详细介绍目前市场上可用的一些优秀DevOps工具,同时指出了持续集成(CI)/持续交付(CD)生命周期的重要类别。
一、配置管理类别
1.Puppet
Puppet是一种开源软件配置管理和部署工具,通常用于确保将所有服务器都配置为所需的状态。Puppet是基于代理的,通常用于Linux和Windows并同时控制多个应用程序服务器。Puppet主要用于客户端/服务器配置,其中其管理的节点与服务器的配置保持同步。用户采用Puppet的代码管理工具R10K,可以更轻松地对持续集成(CI)/持续交付(CD)代码实施自动化或人工更改、更新、审查和测试。用户还可以使用R10K和Puppetfiles来创建环境的自动部署。这些基于代理的部署通常准确及时,并生成错误日志以供审查。
Puppet还提供了与Git的轻松集成以进行版本控制。
Puppet是声明性的,通常适合基线而不是编排。
Puppet具有以下一些缺点:
- 整体运行缓慢。
- Puppet无法在不编写自定义代码的情况下检查exec资源之外的系统状态。
- Hiera是Puppet的键值配置数据查找系统,速度慢且难以排除故障。
2.Ansible
Ansible是一种开源配置管理和编排工具,以其简单性和性能而闻名。Ansible在主机上运行,并使用SSH连接到节点。Ansible可以在任何安装了Python 2(版本2.7)或Python 3(版本3.5及更高版本)的机器上运行,其中包括RedHat、Debian、CentOS、macOS和BSD。
采用Ansible让使用YAML(另一种标记语言)管理配置变得非常容易。使用Ansible自动化跨平台任务也很有效。还可以使用Ansible拉取模式从特定文件中获取存储库和运行命令。用户将shell脚本和配置文件转换为Ansible Playbooks也很容易,并且有很多相关文档可用。
Ansible具有以下一些缺点:
- 随着系统规模扩大而扩展缓慢。
- 缺乏Windows支持。
- 需要跨数百台服务器进行数百次大规模同步时效率低下。
3.Chef
Chef是一种开源DevOps工具,主要用于配置管理。Chef也基于主代理模型,因为Chef客户端在每台客户端机器上运行(使用工具并通过SSH进行通信)。但是,Chef与Puppet的不同之处在于它的额外层,其名称为工作站(Workstation),其中包含所有配置。这些配置首先在本地机器上自动测试,然后推送到服务器上。
当存在主机依赖时,Chef非常出色。它对系统的状态(软件包、现有用户、目录等)进行描述,并将其与代理的实时实例进行比较,确保对象保持同步。
Chef使用AWS OpsWorks等服务维护更大网络的自动化功能在业界广为人知。Chef Inspec还有助于确保用户的网络和部署的安全性和完整性。Chef InSpec是一个开源框架,允许对其应用程序进行自动和人工测试和审计。
尽管Chef具有强大的GUI,但必须了解Ruby才能利用Chef的基础设施即代码模型的真正力量,尤其是在涉及复杂任务和自定义时。用户可以通过在Chef中编写脚本来实现大量自定义,但在许多情况下这样做并不是最佳选择。
Chef具有以下一些缺点:
- 代理实例需要定期监听主要节点来安装更新。
- 初学者难以理解。
- 缺乏详细的文档。
- 缺乏按需可扩展性。
二、建造类别
4.Jenkins
Jenkins是一种用Java编写的开源自动化服务,它可以充当持续集成(CI)工具,使开发人员可以更轻松地将新组件集成到软件中以实现无缝集成。Jenkins使用插件进行集成来实现这一目标。
Jenkins侦听新的拉取请求,将新的工作分支合并到主代码中,运行自动化测试套件,生成新的测试数据,并报告失败的情况,以及将最新的代码更改部署到质量保证(QA)环境以进行人工测试。
Jenkins管道用于实现持续集成过程的自动化表达。用户可以在管道中定义构建文件,将它们加载到SCM并配置作业变量。
Jenkins已经存在了很长时间,并且由于其成熟的生态系统、插件支持、文档和社区,实际上已经成为一个标准。Jenkins在过去几年中提供了几次更新。它已成为许多公司的首选之一,因为它为管道和Docker集成提供了简单的用户体验(UX)/语法。
Jenkins具有以下一些缺点:
- 要使用Jenkins,需要学习Groovy,并且缺乏一致性。Jenkins中的Groovy脚本不容易编写和编辑,尤其是在需要进行大量更改时。
- 在许多情况下,用户还需要人工配置用户界面中的构建、硬编码配置文件和宽松的访问控制。
- 如果没有JenkinsFile,Jenkins极难使用,JenkinsFile是一个文本文件,其中包含Jenkins管道的定义并被签入源代码管理。
5.TeamCity
TeamCity是一种高级持续集成(CI)工具,以其易于使用的界面、流畅的配置和创造性的功能而闻名。TeamCity在Java环境和Apache Tomcat服务器中运行,但也可以安装在Windows和Linux服务器上。
那么应该选择TeamCity吗?这在很大程度上取决于用户的需求。如果有预算,并且主要任务包括设置固定数量的构建代理,以便轻松地使用存储库快照和工件依赖项执行并行构建链,那么可以采用TeamCity。TeamCity也有一个非常可靠的文档。TeamCity的“快照依赖项”功能允许用户在整个管道中保持相同的源版本,而无需低级代码实现。
但是,TeamCity会自动为用户修复snowflake,必须为此使用配置工具或容器技术。 TeamCity基于模板的构建配置可以让用户的工作更轻松。
TeamCity还原生支持AWS、GCE和Azure中的代理自动扩展。它还通过插件支持VMware和Kubernetes,并与GitHub本地集成。
TeamCity具有以下一些缺点:
- 价格昂贵。
- 调试日志和错误日志难以解析和理解。
6.Bamboo
Bamboo是由Atlassian公司开发的持续集成和持续部署服务器。Bamboo的主要优势之一是它能够在单个工作流中自动化构建、测试和发布与其他Atlassian产品(例如JIRA、BitBucket、Stash、Hipchat和Confluence)集成,从而创建一个稳固的软件开发和交付生态系统。
Bamboo还具有可靠、易于使用的图形用户界面(GUI)。 与BitBucket、Confluence和Jira的轻松集成是Bamboo的一大优势。它还可以启动类似cron的触发器,如果用户拥有审查分析、自动测试以及在员工不在办公室时运行的自动例程,这些触发器会派上用场。
但是Bamboo并不完美。以下是它具有的一些缺点:
- Bamboo的代码分析能力不强。
- Bamboo无法集中构建配置。
- 没有全局工具配置(用户必须在代理上人工安装工具)。
- Bamboo缺少凭据插件和支持,这意味着必须在每个相关Bamboo项目上推出密码更改。
三、源代码管理类别
7.GitHub
GitHub是全球数百万人使用的流行的源代码管理工具之一。GitHub的主要优势包括易于使用的用户界面(UI)、智能功能(如恢复意外删除的数据)、防止产品删除、多种集成和安全性。GitHub几乎没有中断或停机,这使得它非常可靠。
GitHub拥有庞大的社区,非常适合开源项目。由于微软公司拥有GitHub,因此Azure DevOps和Microsoft工具具有可靠的集成。GitHub使用户可以更好地控制持续集成(CI)/持续交付(CD)过程。
但是,GitHub仅为每个存储库最多3个协作者提供免费的私有存储库。
8.BitBucket
BitBucket是一种软件版本控制存储库服务,通常用于源代码和开发项目。该服务基于Mercurial或Git版本控制系统。如果使用其他Atlassian产品,BitBucket会很有用。在管理大量回购方面,BitBucket也以其效率而闻名。免费的公共BitBucket存储库可以支持无限数量的用户。
BitBucket还以其与JIRA和Confluence的无缝集成而闻名。BitBucket是涉及私人回购项目的首选。
BitBucket还为完整的持续集成(CI)/持续交付(CD)周期提供管道服务。
BitBucket具有以下一些缺点:
- BitBucket不提供正常运行时间服务等级协议(SLA)。
- 用户界面有时可能令人困惑
9.GitLab
GitLab基于Git,为软件开发提供版本控制、持续交付(CD)服务、部署和管道功能。由于其强大的持续交付(CD)服务,大多数用户更喜欢使用GitLab进行源代码管理。如果希望在自己的服务器上集成持续集成(CI)/持续交付(CD),GitLab是一种可行的方法,因为用户实际上可以在其服务器上托管GitLab。GitLab是免费和开源的,并提供无限数量的免费私人存储库。
GitLab还允许用户安装私有实例,还提供容器注册服务。
四、部署类别
10.Spinnaker
Spinnaker是一个开源持续交付(CD)软件平台,可与Kubernetes、Google Cloud Platform、AWS、Microsoft Azure和Oracle Cloud配合使用。它主要是一个部署和交付平台,用于获取用户的工件并将其部署到生产中。
Spinnaker的仪表板和界面都非常易于使用。开发人员可以轻松地将他们的代码推送到发布分支,该工具将自动构建、测试、验证并将代码推送到生产环境。借助Spinnaker,用户可以使用无缝的Kubernetes、GitHub和Google的云平台构建集成来轻松提交和部署对软件的更改。
Spinnaker可以本地构建EC2AMI、配置ASG和设置负载均衡器。
Spinnaker具有以下一些缺点:
- 缺乏有效的可扩展性。
- 文档稀缺。
- 任务实现自动化比较困难。
11.Octopus Deploy
Octopus Deploy是一种用于自动化部署的持续交付(CD)工具。它可以在代理或“触手”上自动部署应用程序和服务。Octopus Deploy适用于ASP.NET Web应用程序、Java应用程序、NodeJS应用程序,并将自定义脚本运行到多种环境,包括AWS和Azure。大多数情况下,它与AzureDevOps一起使用,并受到了采用Microsoft生态系统的公司的青睐。
Octopus Deploy可以集成管道的持续交付(CD)基础设施。用户可以向Octopus发起API调用,以通过持续交付(CD)管道创建新版本并推送二进制文件。
Octopus Deploy具有以下一些缺点:
- 价格昂贵。
- 不能在项目之间导出变量。
12.Argo CD
Argo CD是一个声明式GitOps持续部署工具,主要用于在Kubernetes集群内部署应用程序。
Argo CD强制同步Kubernetes清单,这些清单在Git存储库中描述应用程序。Argo CD可以自动应用更新或更改的清单以提交对集群的更改。Argo CD服务器可以跟踪用户的主要项目的部署分支。Argo CD还可以自动检测何时将构建分支合并到部署分支中。Argo CD通过首先部署新版本的清单来防止停机。
Argo CD具有以下一些缺点:
- Argo CD不支持持续交付(集成),这意味着如果用户想要一个完整的持续集成(CI)/持续交付(CD)管道,将需要采用其他工具,如Jenkins、Travis、Circle CI或Gitlab CI。
- 不支持回滚。
五、威胁和漏洞管理类别
13. TwistLock(Palo Alto Networks)
TwistLock为基于容器的应用程序提供威胁和漏洞。该服务以其与Kubernetes和Docker容器的集成而闻名。TwistLock现在归Palo Alto Networks所有,通过其运行时应用安全保护和容器自动扫描提供运行时安全检查。
TwistLock有一个强大的文档。易于部署并强制优化资源消耗。它还以其持续集成(CI)/持续交付(CD)管道集成、对容器安全协议的强合规性和图像扫描而闻名。
TwistLock还以其精细级别的安全分析而闻名。该服务还使用人工智能功能来了解用户的运营环境,尽管一些用户发现自动触发的cron作业非常令人困惑。 他们还提供基于SaaS的安全扫描和本地解决方案。
14.Sysdig
Sysdig是一种用于云计算基础设施、服务和应用程序的监控工具。Sysdig通常用于PaaS基础设施上的容器安全和监控以及编排监控。
Sysdig还可用于监控OpenShift集群,因为它提供细粒度数据来分析指标。 使Sysdig脱颖而出的是其容器监控与编排层的强大集成。
如果用户想深入了解进程级流量,Sysdig也很有用。Sysdig Opensource允许用户在内核系统调用级别捕获主机的详细信息。捕获过程也可以实现自动化,通过守护程序或直接代理过程部署为Docker容器。
其他一些功能包括:
- 网络图。
- 监控自托管安装
- 监控基于AWS的系统
- 轻松集成
- 出色的客户支持
15.Anchore
Anchore是一个完整的容器安全工作流解决方案,可与各种开发工具和平台无缝集成。Anchore为一系列不同的应用程序提供量身定制的容器检查和合规性解决方案,使团队能够遵守行业安全标准。
安全团队可以审计和验证整个组织的合规性。
其功能包括:
- 支持网络,包括云托管或本地Kubernetes环境和持续集成(CI)/持续交付(CD)平台
- 基于策略的安全性和合规性
- 检查:
- 漏洞扫描
- 秘密和密码
- 操作系统包
- 第三方库
- Dockerfile检查等
六、质量/测试类别
16.JMeter
JMeter是一种用于测试Web应用程序的负载测试工具。即使JMeter用于负载/性能测试,它仍然可以用于启动API调用、状态代码和响应。JMeter还支持很多插件。
用户还可以使用JMeter的并发池大小功能在测试期间为每个线程启动多个连接。JMeter是独立于平台的,可以在不同环境下流畅运行。
用户还可以通过多种方式查看测试结果,包括图形、图表、树视图、XML和JSON。
17.JUnit
JUnit是一种单元测试框架,主要用于Java应用程序。JUnit框架属于Java框架的xUnit家族。
JUnit使用注解来帮助用户确定应该在测试中使用的方法。其测试运行器功能也因其自定义功能而在开发者社区中享有盛誉。用户还可以在JUnit中使用断言来测试预期结果。
在JUnit中,用户可以在多个参数之间使用不同的组合。使用JUnit为整个应用程序创建和管理丰富的单元测试用例套件变得非常容易。JUnit还可以在模块或系统级测试之前自动测试应用程序的所有功能和单元。
18.Selenium
Selenium是一个端到端的测试软件测试平台,以其用户友好的用户界面而闻名,它允许测试人员模拟Web系统行为、发送API请求并分析系统行为。
Selenium允许用户用RUBY或HTML编写复杂和高级的测试脚本,以解决多个级别的复杂性。
Selenium为Web应用程序开发人员提供了一个完整的IDE,用于编辑、记录和调试测试。用户可以为多个测试用例设置自定义的起点和断点。
Selenium的其他一些主要特性包括:
- 与多个开发平台集成,如Jenkins、Maven、TestNG、QMetry、SauceLabs。
- 使用SeleniumGrid进行并行测试。
- 兼容所有主流语言,包括Java、Ruby、C#、PHP、JavaScript、Perl和R。
19.SonarQube
SonarQube是一种开源工具,用于代码质量、持续检查、安全和错误分析。它适用于Java、Python、XML和PHP以及许多开箱即用的语言。该工具可以通过XPath表达式动态添加规则,用户还可以自定义该工具以强制执行某些应该忽略异常的情况。
SonarQube主要用于静态分析。它与Git Lab有很好的集成。SonarQube的仪表板和高级跟踪使用户可以对代码质量和检查进行大量控制。
SonarQube具有以下一些缺点:
- JavaScript在SonarQub中的运行不是很顺畅。
- 有时运行缓慢。
- 对第三方工具和插件的支持有限。
七、记录和监控类别
20.Grafana
Grafana是一种基于Apache2.0许可证构建的开源分析和监控解决方案,以其出色的用户界面(UI)、图形、图表、实时分析和触发器而闻名。Grafana可以从多个来源提取数据,包括Graphite、InfluxDB、OpenTSDB和Prometheus。
Grafana主要用于监控Docker容器、网络设备、带宽、数据流、虚拟服务器、Azure基础设施、数据库和Web应用程序。Grifana还以其插件以及与Telegraf和Zabbix的无缝集成而闻名。
Grafana可以为用户可视化粒度数据,包括中断的确切时间、中断前的事件、用户日志、数据中心温度和性能预测等指标。
21.NewRelic
NewRelic是一种全栈监控工具,用于跟踪基于云计算的应用程序和软件。NewRelic提供丰富的仪表板、分布式跟踪支持、详细日志、自上而下的可见性和监控。NewRelic对后端调用具有强大的监控能力,可以详细说明系统速度变慢的原因。
该工具对于需要详细分析多个堆栈配置文件的企业非常有用。
NewRelic价格昂贵,但其开发公司最近制定了基于消费的定价模型。
NewRelic具有以下一些缺点:
- 客户支持薄弱。
- 即使在基于消费的定价模型之后也很昂贵。
- 调试复杂且困难。
22.Nagios
Nagios是一种开源软件,可以监控系统、网络和基础设施。它主动监控服务的健康状况并维护日志存储文件。它还显示停机原因、停机持续时间以及可能触发停机的事件。
Nagios还提供了几个配置选项和警报功能。用户可以抑制主机的警报、在主机上强制实施维护模式、自定义警报的通知设置等等。
Nagios支持数百个插件。用户还可以创建自己的自定义并开发自己的插件支持。
但是,由于Nagios相对较旧,因此很难使用最新的基础设施进行操作。它缺乏数据库驱动的配置并强制用户使用配置文件。
八、ITSM和协作类别
23.JIRA
JIRA是全球软件公司使用的一种项目管理和协作工具。 JIRA是一种非常强大的工具,提供各种自定义和功能。
为了充分利用JIRA的优势和强大功能,用户需要行业专家的帮助,因为如果用户的需求很复杂,则该工具很难配置。可以使用JIRA的Portfolio功能创建时间表、发布计划和预测。用户可以使用JIRA的结构来跟踪粒度级别的进度。
其他一些功能包括:
- Zephyr for JIRA是一个本地测试应用程序,可用于整个软件测试生命周期。
- 关键路径工具。
- 计算团队速度的原生工具。
- 与BitBucket和Bamboo等Atlassian产品的集成。
JIRA具有以下一些缺点:
- 乏味且有时令人困惑的用户界面 。
- Bucket/容器在JIRA中被称为“项目”,这很容易混淆。
24.Slack
Slack是一种协作和通信工具,并且广受欢迎。Slack以其实时对话、搜索功能和友好的用户界面而闻名。
由于其强大的用户界面、有趣的功能和敏捷性,Slack正在迅速取代软件行业的电子邮件。 而由于十分流行,现在有几个软件协作工具为即时消息提供了Slack集成。
JIRA和Slack集成通常用于项目活动日志、虚拟Sprint回顾会议、票务解决方案和警报。还可以使用编程为Slack制作自定义聊天机器人、基础设施例程和触发器。
25.Microsoft Teams
Microsoft Teams是一种沟通和协作工具。它对在Windows生态系统中工作的用户很有用。除了即时消息服务之外,Teams也很有用,因为它与AzureDevOps平台集成。用户还可以将Teams与Azure Repos和Azure Pipelines连接起来。
Teams提供不同的渠道,团队可以在其中相互协作。这将创建一个特定于项目的通信存储库,用户可以随时搜索它。
Microsoft Teams其他一些功能包括:
- 文件存储库
- 电话/视频会议
- 聊天机器人集成
- Office365集成
虽然产品选择很好,但可用的众多工具可能令人生畏。缺乏标准化和自动化可能会在入职和/或交接过程中产生极高的学习曲线。通常情况下,企业的各个团队会投资于相似、重叠的工具,从而浪费了时间和费用。随着构建和集成工具链让开发人员筋疲力尽,工具版本的老化以及集成由于遗留代码而陷入困境,安全问题将变得更加严重。