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。
众多的可用工具可能令人望而生畏,但选择本身是一件好事。缺乏标准化和自动化可能会在入职或交接过程中产生极高的学习曲线。选择原则是不要投资于相似、重叠的工具而浪费时间和财务资源。