CI/CD 工具比较:Jenkins、GitLab CI、Buildbot、Drone 和 Concourse

简介: CI/CD 工具比较:Jenkins、GitLab CI、Buildbot、Drone 和 Concourse

介绍

持续集成、交付和部署是旨在帮助增加开发速度并发布经过充分测试的可用产品的策略。持续集成鼓励开发团队尽早测试和集成其对共享代码库的更改,以最小化集成冲突。持续交付建立在此基础上,通过消除部署或发布过程中的障碍。持续部署则进一步通过自动部署通过测试套件的每个构建。


虽然上述术语主要涉及策略和实践,但软件工具在帮助组织实现这些目标方面起着重要作用。CI/CD 软件可以帮助团队自动推进新变更通过一系列阶段,以减少反馈时间并消除流程中的摩擦。


在本指南中,我们将比较一些流行的免费开源持续集成、交付和部署服务器,旨在使协作软件开发更加简单。我们将看看 Jenkins、GitLab CI、Buildbot、Drone 和 Concourse。

Jenkins

Jenkins 是最早的开源持续集成服务器之一,至今仍是最常用的选项。最初是 Hudson 项目的一部分,但在甲骨文收购 Sun 微系统后,由于商标冲突,社区和代码库分裂。Hudson 最早发布于 2005 年,而 Jenkins 的第一个版本发布于 2011 年。


多年来,Jenkins 已经发展成为一个强大而灵活的自动化软件任务系统。Jenkins 本身主要作为一个自动化框架,其中许多重要逻辑是通过一系列插件库实现的。从监听 Web 钩子或监视存储库到构建环境和语言支持,都由插件处理。虽然这提供了很大的灵活性,但你的 CI 过程可能会依赖于许多第三方插件,这可能会很脆弱。


Jenkins 的流水线工作流程——也是通过插件提供的——是一个相对较新的添加,自 2016 年起可用。CI 过程可以使用 Groovy 语言在存储库内的文件中或通过 Jenkins Web UI 中的文本框以声明性或命令式的方式来定义。Jenkins 的一个常见批评是基于插件的配置模型和在存储库之外定义流水线或构建过程的能力有时会使得在不同的 Jenkins 实例上轻松复制配置变得困难。


Jenkins 是用 Java 编写的,并在 MIT 许可下发布。请参阅我们的指南,了解如何在 Ubuntu 16.04 上安装 Jenkins 以为项目配置 Jenkins 服务器。

GitLab CI

GitLab CI 是内置于 GitLab 中的持续集成工具,GitLab 是一个 Git 存储库托管和开发工具平台。最初作为独立项目发布,GitLab CI 在 2015 年 9 月的 GitLab 8.0 版本中与主要 GitLab 软件集成。


GitLab CI 中的 CI/CD 过程是在代码存储库中使用 YAML 配置语法定义的。然后,工作被分派到称为 runner 的机器上,这些机器易于设置,并且可以在许多不同的操作系统上进行配置。在配置 runner 时,你可以选择不同的执行器,如 Docker、shell、VirtualBox 或 Kubernetes,以确定如何执行任务。

GitLab CI 与 GitLab 存储库平台的紧密耦合对软件的使用方式有明显的影响。GitLab CI 对于使用其他存储库托管平台的开发人员来说不是一个选择。积极的一面是,集成功能允许 GitLab 用户设置 CI/CD 环境,而无需安装和学习额外的工具。通过在 Web 界面中启用一些选项、注册 runner 机器并将管道定义文件添加到存储库中,自动化测试可以开始。紧密的关系还允许你在项目之间共享 runner,自动查看存储库中的当前构建状态,并将构建产物与生成它们的代码一起保存。


GitLab 和 GitLab CI 是用 Ruby 和 Go 编写的,并在 MIT 许可下发布。你可以参考我们的指南,了解如何使用 GitLab CI 设置持续集成管道,以了解如何在 GitLab 服务器上配置此功能。

Buildbot

Buildbot 是一个提供巨大灵活性的持续集成框架。最早于 2003 年发布,作为 Mozilla 的 Tinderbox 项目的替代方案,Buildbot 主要设计为自动化跨多种平台的构建测试。


Buildbot 使用 GPL 许可发布,并使用 Python 和 Twisted 库编写。与为了简化配置而将底层语言抽象化不同,Buildbot 的配置完全使用 Python 编写。这意味着配置往往比其他系统复杂得多,但管理员有更多的空间来设计他们理想的工作流程和流程。构建的每个阶段都清晰分离且可编程。Buildbot 定位自己为一个具有构建自定义流程工具的框架,类似于 Web 框架允许你构建自定义站点。


Buildbot 作为构建测试平台的历史意味着它支持许多不同的操作系统和版本控制系统。同样,由于它是为开源测试而设计的,其架构允许用户轻松地向项目提交其首选平台的 worker 以扩展可用的测试基础。用户只需在系统上安装一些 Python 包,然后提供项目的凭据即可。


要开始使用 Buildbot 自动化构建流程,请参考我们的指南,了解如何在 Ubuntu 16.04 上安装 Buildbot。

Drone

Drone 是一个采用容器优先架构构建的现代化 CI/CD 平台。虽然上述讨论的工具都包括使用 Docker 运行构建的选项,但基于容器的工作流程是 Drone 设计的核心。Drone 使用 Go 语言编写,于 2014 年首次以 Apache 许可证发布。


Drone 充当 Docker 和存储库提供程序之间的中间协调层。与启动 CI/CD 服务器然后再连接到版本控制系统托管服务不同,Drone 需要提前获取存储库帐户信息以启动自己的身份验证、用户和权限模型。与其所有的 CI 过程一样,Drone 本身作为一个容器运行。它支持多个数据库后端和存储库提供程序,并具有内置支持使用 Let’s Encrypt 设置传输加密的 TLS/SSL 证书。


Drone 在存储库中寻找特殊的 YAML 文件以定义流水线。该语法旨在易于阅读和表达,以便存储库中的任何人都能理解持续集成过程。Drone 提供了一个插件系统,但它与 Jenkins 中的插件使用方式不同。在 Drone 中,插件是特殊的 Docker 容器,用于将预配置的任务添加到常规工作流程中。这使得通过使用一些参数调用插件而不是手动编写整个过程来完成常见任务变得更容易。在这个意义上,Drone 插件有些类似于设计用于很好地执行一个狭窄焦点任务的 Unix 实用程序命令。


要了解如何设置 Drone 服务器以自动测试您的提交,请参阅我们的在 Ubuntu 16.04 上安装和配置 Drone 的指南。

Concourse

Concourse 是一个相对较新的持续集成平台,最初于 2014 年发布。Concourse 在 CI/CD 领域的方法与我们之前看过的其他工具有很大不同,它试图尽可能地将自身排除在外,最小化状态并将每个外部因素抽象成它称为“资源”的东西。这一哲学的目标是使集成服务器完全可丢弃,以便相同的流程可以轻松地在任何 Concourse 服务器上运行。


持续集成过程的每个部分都是由模拟系统的基本原语组成的。流程的每个部分都明确定义了其依赖关系。例如,第一个任务可能需要 VCS 存储库的最新提交,而流程的后续部分可能需要最新的通过了前几个阶段的提交。通过映射每个步骤的确切依赖关系来构建流水线的这种方法导致了严格定义的行为。

为了进一步从流程中去除偶发状态,Concourse 不会在作业之间隐式传递任何内容,也不提供任何内部方式来存储构建产物。下一个阶段所需的所有信息必须明确定义,并且可能被推送到外部存储以被拉入下一个步骤。通过要求明确定义,Concourse 希望最小化系统必须考虑的假设和未知变量的数量。


Concourse 使用 Go 语言编写,并在 Apache 许可证下发布。如果您想了解如何设置 Concourse 服务器以自动化您的持续集成流程,请查看我们的在 Ubuntu 16.04 上安装 Concourse CI 的指南。

结论

持续集成、交付和部署软件是复杂的自动化系统,旨在使您的流程可靠且可重复。从上述描述中可以看出,关于如何最好地完成自动化测试和发布有许多不同的想法,重点放在方程式的不同部分。没有单一的工具能满足每个项目的需求,但是有这么多高质量的开源解决方案可用,您很有可能能够找到满足团队需求的系统。


目录
相关文章
|
6天前
|
缓存 监控 数据可视化
利用GitLab CI/CD自动化您的软件开发流程
【10月更文挑战第10天】GitLab CI/CD 是 GitLab 内置的持续集成和持续部署工具,通过编写 .gitlab-ci.yml 文件,可以自动化构建、测试和部署应用程序的过程。本文介绍 GitLab CI/CD 的核心优势、实施步骤及在现代开发中的应用,帮助您提高开发效率和软件质量。
|
18天前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
47 0
|
15天前
|
JavaScript 测试技术 持续交付
使用 GitLab CI/CD 管道自动化部署 Web 应用
【10月更文挑战第2天】使用 GitLab CI/CD 管道自动化部署 Web 应用
20 0
|
18天前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
50 0
|
2月前
|
jenkins Shell 持续交付
自动化部署:使用Jenkins和Docker实现CI/CD
【8月更文挑战第31天】 本文旨在引导读者了解如何通过Jenkins和Docker来实现持续集成和持续部署(CI/CD),从而优化开发流程,提升工作效率。文章将详细介绍配置Jenkins服务器、创建Docker镜像以及设置自动化构建和部署的步骤。通过实际操作案例,我们将展示如何将代码变更快速部署到测试或生产环境,确保软件质量与发布速度的双重保障。
|
2月前
|
jenkins Java 测试技术
Jenkins 在持续集成/持续交付(CI/CD)管道中的应用
【8月更文第31天】 在现代软件开发过程中,持续集成(Continuous Integration, CI)和持续交付(Continuous Delivery, CD)已经成为提升开发效率和软件质量的重要实践。Jenkins 是一个广泛使用的开源工具,它能够帮助团队实现自动化构建、测试和部署,是 CI/CD 流水线的核心组件之一。本文将详细介绍 Jenkins 在 CI/CD 管道中的应用,并提供具体的代码示例。
107 0
|
2月前
|
jenkins 持续交付 开发者
自动化部署:使用Jenkins和Docker实现持续集成与交付
【8月更文挑战第31天】本文旨在为读者揭示如何通过Jenkins和Docker实现自动化部署,从而加速软件开发流程。我们将从基础概念讲起,逐步深入到实际操作,确保即使是初学者也能跟上步伐。文章将提供详细的步骤说明和代码示例,帮助读者理解并应用这些工具来优化他们的工作流程。
|
2月前
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
64 1
|
2月前
|
jenkins 持续交付 网络安全
利用 Jenkins 实现持续集成与持续部署-代码拉取终端的配置
【8月更文挑战第30天】在Jenkins服务器中,git和Gitee是常用的代码拉取终端。Git作为分布式版本控制系统,具备出色的灵活性和可扩展性;而Gitee则在国内网络环境下表现更佳,适合团队协作。Git配置包括安装、设置用户信息及生成SSH密钥等步骤;Gitee配置也类似,需注册账号、创建仓库、配置基本信息并设置远程仓库地址。开发人员提交代码后,可通过Webhook、定时轮询或事件监听等方式触发Jenkins动作,确保持续集成和部署高效运行。正确配置这些触发机制并通过测试验证其有效性至关重要。
60 2
|
2月前
|
jenkins 测试技术 持续交付
利用 Jenkins 实现持续集成与持续部署(一)
【8月更文挑战第30天】Jenkins在软件开发中至关重要,其持续集成与部署功能极大提升了开发效率、保障了软件质量、增强了团队协作并加速了产品上市。实现这些功能前需搭建基础环境:配置合适的JDK版本、设置Git版本控制并准备好目标服务器。在Jenkins中创建新任务,详细配置源码管理、构建触发器(如定时构建或监听代码变更)、构建及部署步骤(如使用Maven编译打包、通过SSH插件或Docker部署)。这些关键配置确保了自动化流程的顺畅运行。
62 1