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

简介

持续集成、交付和deployment是旨在帮助提高开发速度和发布经过良好测试、可用的产品的战略。持续集成鼓励开发团队尽早测试他们的更改并将其集成到共享代码库中,以最大限度地减少集成冲突。通过消除部署或发布过程中的障碍,持续交付建立在此基础之上。持续部署通过自动部署通过测试套件的每个构建,从而更进一步。

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

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

Jenkins

Jenkins是最早的开源持续集成服务器之一,至今仍是最常用的选择。最初是Hudson项目)的一部分,社区和代码库在甲骨文收购最初的开发商太阳微系统公司后因商标冲突而分裂。哈德森最初于2005年上映,而第一部以詹金斯的身份上映是在2011年。

多年来,Jenkins已经发展成为一个强大而灵活的系统,可以自动执行与软件相关的任务。Jenkins本身主要充当一个自动化框架,许多重要的逻辑都是通过插件库实现的。从监听Web挂钩或查看存储库到构建环境和语言支持,所有事情都由插件处理。虽然这提供了很大的灵活性,但您的CI过程可能会依赖于大量的第三方插件,而这些插件可能是脆弱的。

Jenkins的流水线工作流程--也是通过插件提供的--是一个相对较新的功能,从2016年起就可以使用。CI过程可以声明性地定义,也可以使用GroovyLanguage)(在存储库本身的文件中或通过Jenkins web UI中的文本框)强制定义。对Jenkins的一个常见批评是,以插件为中心的配置模型和在存储库外定义管道或构建流程的能力有时会使在不同的Jenkins实例上轻松复制配置变得困难。

Jenkins是用Java编写的,在麻省理工学院的许可下发布。按照我们的指南如何在Ubuntu 16.04上安装jenkins来为您的项目配置jenkins服务器。

GitLab CI

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

GitLab CI中的CI/CD进程使用YAML配置语法在代码存储库本身的文件中定义。 然后,工作被分派到称为runner的机器上,这些机器很容易设置,可以在许多不同的操作系统上提供。 在配置运行器时,您可以选择不同的执行程序,如Docker,shell,VirtualBox或Kubernetes,以确定如何执行任务。

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

GitLab和GitLab CI是用Ruby和Go编写的,在麻省理工学院的许可下发布。您可以按照我们的指南如何使用GitLab CI设置持续集成管道]来了解如何在您的GitLab服务器上配置此功能。

Buildbot

构建机器人是一个持续集成框架,提供了极大的灵活性。作为Mozilla的Tinderbox项目的替代方案,Buildbot于2003年首次发布,其设计初衷是提供一种在多种平台上实现构建测试自动化的方法。

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

Buildbot作为构建测试平台的历史意味着它支持许多不同的操作系统和版本控制系统。 同样,由于它的设计考虑到了开源测试,其架构允许用户轻松地将工作人员与他们首选的平台提交到项目中,以扩展可用的测试基础。 用户只需要在系统上安装几个Python包,然后向项目提供凭据。

要开始使用Buildbot自动化您的构建过程,请遵循我们的指南如何在Ubuntu 16.04.上安装Buildbot

嗡嗡作响

无人机是一个现代化的CI/CD平台,采用集装箱优先的架构。虽然上面讨论的工具都包括使用Docker运行构建的选项,但基于容器的工作流是Done设计的核心。无人机是用Go编写的,于2014年在阿帕奇许可下首次发布。

Done充当Docker和存储库提供商之间的中间协调层。Droone不是启动CI/CD服务器,然后连接到版本控制系统托管服务,而是预先需要存储库帐户信息来引导其自己的身份验证、用户和权限模型。与其所有CI进程一样,无人机本身也是作为容器运行的。它支持多个数据库后端和存储库提供商,并内置支持使用让我们加密)设置tls/ssl证书。

Done在存储库中查找管道定义的特殊YAML文件。语法被设计为易于阅读和表达,以便使用存储库的任何人都可以理解持续集成过程。Done提供了一个插件系统,但它的使用方式与Jenkins中的不同。在Done中,插件是特殊的Docker容器,用于将预配置的任务放入常规工作流中。这使得通过使用几个参数调用插件而不是手动编写整个过程的脚本来完成常见任务变得更容易。从这个意义上说,无人机插件有点类似于Unix实用程序命令,它们被设计成很好地完成一个狭隘的任务。

要了解如何设置无人机服务器来自动测试您的提交,请遵循我们的如何在Ubuntu 16.04上安装和配置无人机》指南。

大厅

ConCourse是一个相对较新的持续集成平台,最初发布于2014年。ConCourse处理CI/CD空间的方法与我们研究过的其他工具有很大的不同,因为它试图尽可能地将自己排除在等式之外,最小化状态,并将每个外部因素抽象为它所称的资源。这一理念的目标是使集成服务器完全一次性,以便相同的进程可以轻松地在任何ConCourse服务器上运行。

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

为了进一步从流程中删除附带状态,ConCourse不会在作业之间隐式传递任何内容,也不提供任何存储构建构件的内部方法。必须显式定义下一阶段所需的所有信息,并可能将其推送到外部存储以拉入下一步。通过要求明确的定义,ConCourse希望将系统必须考虑的假设和未知变量的数量降至最低。

ConCourse是用Go编写的,并在阿帕奇许可下发布。如果您想了解如何设置会议服务器以自动化您的持续集成过程,请查看我们的指南如何在Ubuntu 16.04.上安装会议配置项

结论

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

Published At
Categories with 技术
Tagged with
comments powered by Disqus