vlambda博客
学习文章列表

CI/CD 工具选型:Jenkins 还是 Bamboo?

作者 | Himanshu Sheth
编辑  田晓旭
持续集成和持续交付是在软件开发生命周期中获得交付一致性的方法。作为一个流程,它帮助你自动化开发管道,同时确保所有事情都可跟踪。其中有趣的部分是在开发阶段中引入自动化。当我们谈到集成和交付时,另一个与之匹配的过程是“持续测试”,或者有时我们称之为 DevOps 测试。虽然持续集成(CI)和持续交付(CD)已经成为 DevOps 的重要组成部分,但在选择最佳工具时,DevOps 团队常常会陷入困境。如果没有 CI/CD 工具是无法想象的。

本文最初发布于 DZone,经原作者授权由 InfoQ 中文站翻译并分享。

持续集成(CI)和持续交付(CD) 已经成为 DevOps 的重要组成部分,但在选择最佳工具时,DevOps 团队常常会陷入困境。开源工具是否适合你的项目需求,还是应该选择专有工具?特性更新和现有的客户反馈如何?

我的团队经常被这些突出的问题所困扰,这促使我们对各种 CI/CD 工具进行比较。在本文中,我们将仔细分析 Bamboo 与 Jenkins 之间的差异,使你对如何正确选择 CI/CD 工具有更深入的认识。

在具体比较 Bamboo 和 Jenkins 之前,让我们先了解一些基础内容。

1 Jenkins 是什么?

Jenkins 是当今市场上广泛使用的 CI/CD 工具之一。人们已经使用它很长时间了,如果组织在寻找理想的开源 CI/CD 工具,那么它非常合适。Jenkins 是用 Java 编写的,它提供了大量的特性以及在主要平台上的可移植性。

Jenkins 是开源且免费的,是早期创业公司的首选。许多成长阶段的组织也比较喜欢 Jenkins,因为他们可以通过自动化加速软件产品的开发。Jenkins 可用于 Windows、macOS 等平台,以及 openSUSE、Red Hat、Ubuntu 等不同风格的 Linux。

Jenkins 是可扩展的,并且有一个蓬勃发展的插件生态系统。Jenkins 的插件可以帮助你整合各种 DevOps 阶段。它遵循两条发布线——每周发布和 LTS(长期支持),类似于其他常用的开源项目。

在撰写这篇比较 Bamboo 和 Jenkins 的文章时,Jenkins LTS 的最新版本是 2.235.1,Jenkins 每周发布版本的最新版本是 2.242。

以下是 Jenkins 的主要特性:

  • 免费、开源;

  • 很棒的插件;

  • 广泛的社区;

  • 支持管道;

  • 支持并行执行;

  • 广泛的集成能力;

  • 易于安装配置;

  • 提供 REST API。

2 Bamboo 是什么?

Bamboo Server 也是用于持续集成(CI)的流行工具。它是由 Atlassian 在 2007 年开发的,该组织以项目跟踪软件 JIRA 而闻名。Bamboo 是一个商业产品,它允许你在单个工作流中执行自动化构建、测试和发布。

使用 Bamboo Server,通过无缝集成 Jira 和 Bitbucket 服务器,你可以实现发布、执行、质量和状态的端到端可视化。它还提供了内置部署支持、自动合并和 Git 分支等特性。Bamboo 支持编程扩展和组合。Bamboo 可用于 Windows、Mac OS X 和 Linux 等平台。在撰写这篇 Bamboo 和 Jenkins 的对比文章时,Bamboo Server 的最新版本是 7.0.3。

Bamboo 的主要特性包括:

  • 可以从 Jenkins 无缝迁移;

  • 内置 Jira 软件和 Bitbucket Server 集成;

  • 内置 Git 分支工作流;

  • 内置部署项目;

  • 测试自动化;

  • 支持并行执行;

  • 提供 REST API;

  • 安装配置简单。

现在让我们对比下,看看 Bamboo 和 Jenkins 在可用性、技术支持和其他优秀 CI/CD 工具必备的集成特性方面哪个更好。

3 Bamboo 和 Jenkins 的对决

相关 CI/CD 工具的介绍就到这里,现在可以进入正题了。以下是我们在对 Bamboo 和 Jenkins 进行比较时使用的主要指标。

安装和配置

Jenkins 很容易安装,因为它是一个自包含的 Java 程序,能够以开箱即用的方式运行。在此之前,必须在目标机器上安装 Java,Jenkins 的安装非常简单。Jenkins 支持 JDK8,最新版本也已开始支持 Java 11 环境。

安装完之后,使用一个简单的 Web 界面执行配置检查。Jenkins 可以安装到 Windows、Mac OS X 和流行的 Linux 操作系统上。我们还可以将 Jenkins 作为 servlet 运行在不同的 Java servlet 容器中,如 GlassFish 或 Apache Tomcat。然而,Jenkins 缺乏现成的支持,但你可以在一个庞大的社区中提出问题。由于它是一个开源工具,这也正常。

与 Jenkins 相比,安装和配置 Bamboo Server 所需的步骤更多。通常,你需要在机器上安装 Java,然后创建一个专门的用户来运行 Bamboo。这里,你还必须创建一个主目录,根据需要启动并配置 Bamboo Server。安装过程可能有点费时,但你会发现 Bamboo 的用户界面更友好。

就这两款 CI/CD 工具的设置和配置而言,Jenkins 和 Bamboo 都很好用。这方面的评价可能比较主观,因为它取决于你的需求。

扩展和定制

Jenkins 和 Bamboo 都提供了 RESTful API 用于扩展。如果你计划将应用程序与 Bamboo Server 集成,那么可以使用 Bamboo REST API。计划在脚本中与 BambooServer 交互的管理员也可以使用。默认的响应格式是 JSON,但是可以选择请求 XML 而不是 JSON。

Jenkins 的远程访问 API 可用于 Python、XML 和 JSON。与 Bamboo 中的 API 一样,Jenkins API 也可以用于触发新的构建、创建作业、从 Jenkins 获取资源消耗信息等操作。

易于使用

在用户友好度方面,Bamboo 较 Jenkins 有着巨大的优势。Bamboo 有一个友好直观的用户界面,可以根据用户需求定制。但是它否决了 Jenkins 吗?不!这取决于你使用这些工具的方法。一旦你开始使用 Jenkins,你就会意识到它主要关注的是功能,其次才是可用性。

每当在 Bamboo 中添加新任务时,它都会提供关于构建和部署状态的详细信息。而 Jenkins 关注的是,开发人员可以利用丰富的 Jenkins 插件根据他们的需要方便地定制体验。

如果要在 Bamboo 和 Jenkins 之间选出更好的 CI/CD 工具,那么你必须在功能和用户友好性之间进行取舍。

插件生态

插件为 CI/CD 工具提供了更强大的功能,但是你需要挑选出对你有帮助的那些。与 Bamboo 相比,Jenkins 的主要优势之一是其欣欣向荣的插件生态系统。Jenkins 是开源的,其全球性社区非常强大,插件的广泛可用性就是证明。目前,社区贡献的 1500 多个 Jenkins 插件可以帮助构建、DevOps 测试、部署和自动化项目。

另一方面,在 Atlassian 市场上有将近 200 个 Bamboo 插件(或附加组件)。内置集成 Bitbucket、Jira 和 Confluence 是 Bamboo 服务器的最大卖点。

Jenkins 更多的是以功能为中心(通过插件),定制成本低,避免了昂贵的内部定制。在插件竞争中,Jenkins 遥遥领先。

宿主(云或本地)

Bamboo 只有本地版本,因为云版本在 2017 年初就停止提供了。虽然使用 BitBucket 管道替换了该服务,但还是无法与 Bamboo Cloud 相比。

相反,Jenkins 有云版本和本地版本两种版本可供选择。Jenkins 最适合安装在云上的自托管管道。如果你计划在 DevOps 测试或开发中使用 Jenkins 的本地变体,那么使用 Jenkins 构建可伸缩的架构是一个不错的参考。

在云端 CI/CD 工具方面,Jenkins 有明显的优势。

并行性

Jenkins 和 Bamboo 都支持并行构建。对于 Bamboo 服务器,默认情况下每个阶段都有一个作业,但是可以用它对多个作业进行分组。为了在 Bamboo 中并行执行作业,必须有多个代理(即作业在多个代理上并行处理)。每个阶段都必须完成它所有的作业,计划的下一阶段才会开始执行。

  • 每个作业中的任务是顺序执行的;

  • 每个阶段中的作业是并行执行的;

  • 每个计划中的阶段是顺序执行的。

另一方面,Jenkins 中的并行性可以归结到管道,我们可以:

  • 根据我们选择的语言将测试配置为并行;

  • 将 Jenkins 构建配置为参数化构建;

  • 将 Jenkins 项目设置为 Matrix 项目。

Parallel Test Executor 插件进一步帮助你划分大小相同的测试单元,然后将它们转换为排除列表。然而,由于构建共享相同的环境,Jenkins 只部分支持 DevOps 测试并行。当使用像文件系统这样的共享资源时,这一因素会导致问题。

在 DevOps 测试中,Bamboo 和 Jenkin 的并行性都符合用户的期望,在这方面的对决中,Bamboo 和 Jenkins 没有明显的赢家。

云集成

Bamboo 默认集成了 JIRA、Bitbucket。这些集成有助于实现发布执行、质量和状态的完全透明。Bamboo 只能用于 Windows、Linux、Solaris 和 macOS(或 OSX)平台。它还支持 AWS。Bamboo Server EC2 向导让你可以在几分钟内在 AWS 中启动并运行 Bamboo 服务器。

人们希望提供在 Azure 云上部署 Bamboo 计划的特性。然而,根据 Azure 文档,可以使用 Azure PowerShell 在 Azure 上部署 Bamboo 服务器。自动化可以使用脚本任务来实现。当在 Azure 中使用 Bamboo 时,可以看下 StackOverflow 上关于使用 Bamboo 在 Azure 上实现持续部署的话题,这会很有帮助。此外,Bamboo 的 LambdaTest 集成 可以帮助你完成所有无缝 DevOps 测试需求。

另一方面,Jenkins 支持与多种云平台集成,如 VMWare vSphere、Amazon EC2、谷歌云等。集成可以使用插件来实现。LambdaTest 提供了一个与 Jenkins 无缝集成的插件,以实现高效的 DevOps 测试。

  • Amazon EC2

  • 谷歌云

  • Microsoft Azure

  • Digital Ocean

社区支持

由于 Jenkins 是一个开源项目,社区参与广泛。社区支持是 Jenkins 比其他商业 CI/CD 工具(如 Bamboo)拥有更多插件的主要原因。当涉及到故障排除、经验共享、评审、文档等方面时,社区会积极参与。Jenkins 还有一个活跃的 Jenkins 社区博客,提供了关于 Jenkins 的富有洞察力的信息。

Bamboo 在现有的 Atlassian 社区下也有一个支持论坛。在撰写本文时,社区中关于 Bamboo 服务器的帖子有 7890 篇。除了支持论坛,Atlassian 官方博客上也有关于 Bamboo 的博文。

由于 Jenkins 是开源的,并且多年来一直在开发(和使用)中,因此在社区支持方面,Jenkins 无疑会胜出。

特性和功能

强大的社区是 Jenkins 的支柱,但也不能忽视它的特性集。Jenkins 可用于构建和分析代码。它支持所有流行的版本控制系统和构建系统。协作计划 是 Jenkins 项目未来发展和扩展的一个不可或缺的部分。

Bamboo 支持自动合并,这有助于简化 Git 和 Mercurial 分支的合并过程。它带有内置的 Git 分支和工作流,可以帮助你根据分支名称自动检测、构建、测试分支并合并到(准备或生产)服务器。Jira 是一款广泛使用的跟踪软件,内置 Jira 软件集成是 Bamboo 的一大亮点。

除此之外,Bamboo 还提供了内置的部署支持,可以自动向测试环境发送连续的构建流,并在准备就绪时将构建发布给客户。

发布周期

和其他开源项目一样,Jenkins 也遵循 LTS(长期支持)和每周发布周期。Jenkins 2.235.1 发布于 2020 年 6 月 17 日,是 Jenkins 的最新稳定版本。官方网站上提供了 Jenkins LTS 和每周发布的更改日志。

在撰写本文时,Bamboo 服务器的最新版本是 7.0.3(2020 年 3 月)。在 Bamboo 归档中也可以下载到 Bamboo 的旧版本。

总的来说,就发布周期而言,Jenkins 和 Bamboo 都表现良好(而且及时)。

分布式运行(或执行)

Bamboo 和 Jenkins 都可以运行分布式作业。正如 Bamboo 社区所言,Bamboo 使用主从概念实现分布式运行。

在使用 Jenkins 进行分布式运行时可能会出现性能问题,因为它使用的是与运行 GUI 相关任务相同的实例。

开源 vs. 商业

免费软件还是商业软件?在选择理想的 CI/CD 工具时,这是一个最大的问题。

Jenkins 是一个开源项目,可以免费使用。因此,对于正在寻找最佳 CI/CD 工具以加速其构建和测试过程的早期初创公司来说,这是一个显而易见的选择。Jenkins 所涉及的唯一成本是基础设施成本。虽然 Jenkins 有一定的学习曲线,但如果你了解团队对 Jenkins 的熟悉程度会好一些。

Bamboo 是来自 Atlassian 的商业软件。它提供为期 30 天的试用。根据官方网站的介绍,Bamboo 适合各种规模的团队。价格取决于团队规模、代理个数及作业数量。

  • 面向小型团队的 Bamboo Server——10 美元 (最多 10 个作业,本地代理数不限,无远程代理)。

  • 面向成长型团队的 Bamboo Server——1270 美元起(作业数不限、本地代理数不限、远程代理数取决于方案)。

CI/CD 工具的选择取决于你的预算和项目需求。

4 Bamboo vs. Jenkins 对比快照

以下是 Bamboo 和 Jenkins 的对比快照:

特性 JENKINS BAMBOO
开源或商业 免费(开源) 商业许可
产品类型 自托管 / 本地 本地
安装配置 简单 简单
易用性 相比于可用性,更专注于功能 易于使用和定制
官方支持 因为它是一个开源项目,所以没有官方支持。可以通过 IRC、Jenkins 论坛和其他支持渠道获得支持。
Plugin 生态系统 丰富的插件生态系统(1500 多个插件) Atlassian 市场上有将近 200 个插件
并行性 是(部分)
报表
构建管道 通过 Jenkins Pipeline DSL 自定义管道 Bamboo Cloud 于 2017 年停止开发,取而代之以 BitBucket 管道,反应不是很好。
集成
REST API
简单易用的企业级权限 通过插件提供支持
在线文档
内置 Git 分支工作流 不支持
内置 Jira 软件集成 不支持
5 Bamboo vs. Jenkins:应该选择哪种 CI/CD 工具?

在选择理想的 CI/CD 工具时,没有预先定义好的经验法则。你必须从技术和预算的角度对该工具进行清晰的评估。另外,看看你的团队具备什么样的 CI/CD 工具知识,因为这个过程会涉及到一个很长的学习曲线。

如果你正在寻找具有良好功能的 CI/CD 工具,那么就选 Jenkins 吧。然而,你的团队应该有 DIY(自己动手)精神,因为他们将不得不使用 Jenkins 插件进行定制。

如果你正在寻找一款具有良好用户体验并与现有技术很好集成的工具,那么请选择 Bamboo。建议在你(和你的团队成员)做出决定之前,先试用下这些工具。

选择最好的 CI/CD 工具是成功的一半,因为你仍然需要关注部署,这是面向 DevOps 测试的敏捷开发中不可缺少的组成部分。建议不要忽略 CI 管道中的测试自动化(或自动化测试)。在执行自动化 DevOps 测试时,基于云的测试平台可以对集成和迁移提供重要帮助。

原文链接:

https://dzone.com/articles/bamboo-vs-jenkins-showdown-of-cicd-tools

今日文章推荐


点个在看少个 bug 👇