DevOps 正在扭转寰球软件开发的状态,DevOps 正以某种模式无效地进步进步寰球软件公司的上市速度、可销售性、翻新和产品质量。
2021 年是 DevOps 的重要一年。因为 DevOps 逾越开发、经营、IT、平安和产品团队等等,以及软件开发的不同阶段,因而有大量工具可供选择。
本文介绍目前市场上可用的一些顶级 DevOps 工具,同时牢记 CI/CD 生命周期的重要类别。本篇为配置管理、构建、源代码、部署工具,下篇次要是破绽治理、品质、监控、合作工具。
配置管理
Puppet
Puppet 是一种开源软件配置管理和部署工具,通常用于确保所有服务器都配置为所需的状态。Puppet 是基于代理的,最罕用于 Linux 和 Windows 同时管制多个应用程序服务器。Puppet 次要用于客户端 / 服务器配置,其中受管节点与服务器的配置放弃同步。借助 Puppet 的代码管理工具 R10K,能够更轻松地对 CI/CD 代码施行自动化或手动更改、更新、审查和测试。还能够应用 R10K 和 Puppetfiles 来主动部署环境。这些基于代理的部署个别比拟精确、及时,还能生成谬误日志以供审查。
Puppet 还为版本控制提供了与 Git 的简略集成。
Puppet 是申明式的,通常适宜基线而非编制。
Puppet 毛病:
- 总体速度迟缓
- 在不编写自定义事实的状况下,Puppet 无奈查看 exec 资源之外的零碎状态
- Hiera 是 Puppet 的键值配置数据查找零碎,速度慢且排查故障艰难
Ansible
Ansible 是开源配置管理和编排工具,以其简洁和性能而闻名。Ansible 在主机上运行并应用 SSH 连贯到节点。Ansible 能够在任何装置了 Python 2(版本 2.7)或 Python 3(版本 3.5 及更高版本)的主机上运行,包含 Red Hat、Debian、CentOS、macOS 和 BSD。
Ansible 让应用 YAML 治理配置变得很容易。用 Ansible 做自动化跨平台工作也很无效。还能够应用 Ansible pull 模式从特定文件中获取存储库和运行命令。将 Shell 脚本和配置文件转换为 Ansible Playbooks 或 Roles 也很容易,且有很多文档可用。
Ansible 毛病:
- 零碎规模及扩大迟缓
- 不足 Windows 零碎的反对
- 当数百个服务器须要数百个大规模同步时效率低下
Chef
Chef 是次要用于配置管理的开源 DevOps 工具。Chef 也基于主代理模型,因为 Chef 客户端在每台客户端机器上运行(应用“knife”工具并通过 SSH 进行通信)。Chef 与 Puppet 的不同之处在于它的额定层,称为工作站,其中蕴含所有配置。这些配置首先在本地机器上自动测试,而后推送到服务器上。
当存在主机依赖关系时,Chef 的体现十分杰出。它能获取零碎的状态(包、现有用户、目录等),并将它们与代理的实时实例进行比拟,并确保对象放弃同步。
在业界广为人知的是,Chef 应用 AWS OpsWorks 等服务保护更大网络的自动化性能。Chef Inspec 还有助于确保网络部署的安全性和完整性。Chef InSpec 是一个开源框架,容许对应用程序进行主动、手动测试和审计。
只管 Chef 具备弱小的 GUI,但必须理解 Ruby 能力利用 Chef 的基础架构即代码模型的真正力量,尤其是波及简单工作和自定义时。能够通过在 Chef 中编写脚本(被称为烹饪书和菜谱)来实现大量自定义,但在许多状况下这样做并不是最佳抉择。
Chef 毛病:
- 代理实例须要定查看主机来装置更新
- 初学者难以了解
- 不足具体的文件
- 不足需要的可扩展性
构建
Jenkins
Jenkins 是用 Java 编写的开源自动化服务,它充当 CI(继续集成)工具,使开发人员能够更轻松地将新组件集成到软件中,以实现无缝集成。Jenkins 应用插件进行集成来实现这一指标。
Jenkins 听取新的拉取申请,将新的工作分支合并到主代码中,运行自动化测试套件,生成新的测试数据,报告失败,并将最新的代码更改部署到 QA 环境以进行手动测试。
Jenkins Pipeline 用于实现继续集成过程的自动化表白。能够在管道中定义构建文件,将它们加载到 SCM 并配置工作变量。
Jenkins 曾经存在了很长时间,并且因为其成熟的生态系统、插件反对、文档和社区,实际上曾经成为一种规范。Jenkins 在过来几年中有几次更新。它已成为许多公司的首选之一,因为它为管道和 Docker 集成提供了简略的 UX/ 语法。
Jenkins 的毛病包含:
- 要应用 Jenkins,须要先学 Groovy,它因其不一致性而臭名远扬。Jenkins 中的 Groovy 脚本不易编写和编辑,尤其是要大量地更改时。
- 在许多状况下,还须要手动将构建配置到 UI、硬代码配置文件和涣散的访问控制中。
- 如果没有 JenkinsFile,Jenkins 极难应用,JenkinsFile 是一个文本文件,蕴含 Jenkins Pipeline 的定义,且该文件由源代码管制。
TeamCity
TeamCity 是一款高级 CI 工具(提供受限的收费版本),以其易于操作的界面、晦涩的配置和翻新性能而闻名。TeamCity 在 Java 环境和 Apache Tomcat 服务器中运行,但也能够装置在 Windows 和 Linux 服务器上。
是否抉择 TeamCity 在很大水平上取决于本身需要。如果有短缺估算,且次要工作包含设置固定数量的构建代理,以便用存储库快照和工件依赖项轻松建设并行构建链,那 TeamCity 将十分适合。
TeamCity 也有十分牢靠的文档。TeamCity 的“Snapshot Dependencies”性能容许你在整个管道中放弃雷同的源版本,而无需底层代码实现。
然而,TeamCity 会主动修复 snowflake agents,为此,必须应用配置工具或容器技术。
TeamCity 基于模板的构建配置能够让生存更轻加松。
TeamCity 还原生反对 AWS、GCE 和 Azure 中的代理主动扩大。它还通过插件反对 VMware 和 Kubernetes,并与 GitHub 本地集成。
TeamCity 毛病:
- 价格昂贵
- 调试日志和谬误日志难以解析和了解
Bamboo
Bamboo 是由 Atlassian 开发的继续集成和继续部署服务器。Bamboo 的次要劣势之一是它可能在单个工作流中将自动化构建、测试和公布与其余 Atlassian 产品(例如 JIRA、BitBucket、Stash、Hipchat 和 Confluence)集成,从而创立一个巩固的软件开发和交付生态系统。
Bamboo 还具备牢靠、易于应用的 GUI。
与 BitBucket、Confluence 和 Jira 的轻松集成是 Bamboo 的一大劣势。它还能够启动相似 cron 的触发器,如果员工不在办公室,但有审核剖析、自动化测试和自动化程序要运行,这些触发器会派上用场。
Bamboo 毛病:
- Bamboo 的代码剖析能力不强
- Bamboo 无奈集中构建配置
- 没有全局工具配置(必须在代理器上手动装置工具)
- Bamboo 不足凭据插件和反对,这意味着每个 Bamboo 相干的我的项目都必须推出明码更改性能
源代码治理
GitHub
GitHub 是寰球数百万人应用的最风行的源代码管理工具之一。GitHub 的次要劣势包含:易操作的 UI、智能性能如意外删除的存储库复原性能、避免成品删除、集成多样化和安全性。GitHub 简直没有中断或停机,这使得它十分牢靠。
GitHub 领有宏大的社区,非常适合开源我的项目。因为 Microsoft 领有 GitHub,所以 Azure DevOps 和 Microsoft 的工具能够进行严密集成。GitHub 让你能更好地管制 CI/CD 过程。
然而,GitHub 只为每个存储库最多 3 个协作者提供收费的私人存储库。
GitLab
GitLab 基于 Git,为软件开发提供版本控制、CI 服务、部署和管道性能。因为其弱小的 CI 服务,大多数公司更喜爱应用 GitLab 进行源代码治理。如果你想在本人的服务器上集成 CI/CD,GitLab 是一个可行办法,因为你其实能够在服务器上托管 GitLab。GitLab 收费且开源,并提供有限数量的收费私人存储库。
GitLab 还容许你装置公有实例,还提供容器注册服务。
部署
Spinnaker
Spinnaker 是一个开源 CD 软件平台,可与 Kubernetes、Google Cloud Platform、AWS、Microsoft Azure 和 Oracle Cloud 配合应用。它次要是一个部署和交付平台,用于获取工件并将其部署到生产中。
Spinnaker 的仪表板和界面都十分易于应用。开发人员能够轻松地将他们的代码推送到公布分支,该工具会主动构建、测试、验证并将代码推送到生产环境。借助 Spinnaker,你能够应用 Seamless Kubernetes、Github 和 Google 的云构建集成,轻松交付、部署对软件的更改。
Spinnaker 能够本地构建 EC2 AMI、配置 ASG 和设置负载均衡器。
Spinnaker 毛病:
- 不足无效的可扩展性
- 文件稀缺
- 自动化工作艰难
Octopus Deploy
Octopus Deploy 是一个用于自动化部署的 CD 工具。它能够在代理机器或“触手”上主动部署应用程序和服务。Octopus Deploy 实用于 ASP.NET Web 应用程序、Java 应用程序、NodeJS 应用程序,并将自定义脚本运行到多种环境,包含 AWS 和 Azure。大多数状况下,它与 AzureDevOps 一起应用,并受到应用 Microsoft 生态系统的公司的青眼。
Octopus Deploy 能够集成流水线的 CI 基础设施。能够向 Octopus 发动 API 调用,以创立新版本,并通过 CI 管道推送二进制文件。
Octopus 的毛病如下:
- 价格昂贵
- 无奈在我的项目之间导出变量
Argo CD
Argo CD 是一个申明式的 GitOps 继续部署工具,次要用于 Kubernetes 集群中部署应用程序。
Argo CD 强制同步 Kubernetes 清单,这些清单在 Git 存储库中记录你的应用程序。Argo CD 能够主动利用已更新的清单以提交对集群的更改。ArgoCD 服务器能够跟踪主我的项目的部署分支。Argo CD 还能够自动检测何时将构建分支合并到部署分支中。Argo CD 通过首先部署新版本的清单来避免停机。
Argo CD 毛病:
- Argo CD 不反对 CI,这意味着如果你想要一个残缺的 CI/CD 管道,那就须要借助其余工具,如 Jenkins、Travis、Circle CI 或 Gitlab CI。
泛滥的可用工具可能令人望而却步,但抉择自身是一件坏事。不足标准化和自动化可能会在入职或交接过程中产生极高的学习曲线。抉择准则是不要投资于类似、重叠的工具而浪费时间和财务资源。