Jenkins与GitLab CI/CD的深入评估和比较

译文
开发 测试
下面,本文通过对Jenkins和GitLab CI/CD这两种DevOps测试工具的评估与比较,引导您根据实际项目、预算和其他要求,来选择恰当的工具。

【51CTO.com快译】近年来,随着持续集成(CI)和持续交付(CD)在业界的广泛采用,针对DevOps质量检查的测试也在与时俱进。目前,在众多CI/CD测试工具中,最常用的莫过于Jenkins和GitLab CI/CD这两个工具。Jenkins发布于2011年,专注于CI/CD业务,一直是测试人员的首选。GitLab CI/CD自2014年被推出以来,以其先进的功能长盛不衰。Jenkins在GitHub上拥有16,000多颗星,而GitLab CI/CD只有2012颗。不过,在G2(https://www.g2.com/products/jenkins/reviews)上,Jenkins的平均分为4.3星,有288条评论;而GitLab CI/CD的评分为4.4星,有270条评论。两者可谓势均力敌。我们曾为两者发起过一项调查,下图是大家的投票结果。其中在“其他工具”中提及最多的便是GitLab CI/CD。

作为一位DevOps测试专家,您往往需要根据项目、预算和其他方面的要求,来选择恰当的工具。下面,我将对Jenkins和GitLab CI/CD进行深入的评估与比较。

Jenkins介绍

[[345434]]

Jenkins(https://www.jenkins.io/)是一款开源的可扩展式CI/CD工具,可被用于自动化部署。它完全由Java所编写,并获得了MIT的许可。Jenkins具有一组强大的功能,可以自动执行与软件的构建,测试,部署,集成和发布等相关的任务。该工具可在macOS、Windows和各种UNIX版本(例如OpenSUSE、Ubuntu、以及Red Hat等)上使用。除了使用适合本机安装的软件包之外,它还可以被独立地安装、或作为Docker安装在任何装有Java 运行时环境(Runtime Environment,JRE)的计算机上。

Jenkins团队有一个名为Jenkins X的子项目,它可以直接与Kubernetes一起无缝地运行管道中。Jenkins X通过巧妙地集成Helm、Jenkins CI/CD服务器、Kubernetes和其他工具,可提供诸如GitOps之类,具有内置最佳实践的说明性CI/CD工具管道。

Jenkins的一项优点是脚本结构合理,易于理解且可读性强。目前,Jenkins团队已经开发出了大约1,000多种可与各种流行技术相融合的插件。例如,Credentials Command插件能够轻松地在脚本中添加隐藏式的身份验证凭据。

在Jenkins管道开始运行后,您可以获悉到验证阶段成败与否,以及每个阶段的总数。不过,您将无法在其图形概览中检索到特定作业的状态,而只能跟踪终端中的作业进度。

Jenkins的核心功能

Jenkins以易于设置、自动构建过程、以及为用户提供的大量文档而闻名。在进行DevOps测试时,Jenkins十分可靠,用户不必监视整个构建的过程。下面,我们来看看Jenkins能够提供的哪些核心功能。

1.免费、开源且易于安装

Jenkins可以与Docker结合起来,为自动化作业提供高效性和一致性。它也可以在诸如:Apache Tomcat和GlassFish之类的Java容器中作为servlet运行。此外,它还提供各种文档,来指导用户的整个安装过程。

2.广泛的插件生态系统

与其他CI/CD工具相比,Jenkins的插件生态系统更加成熟。插件的范围含括了从特定语言的开发工具,到各种构建工具。用户可以在此基础上免费进行定制。此外,这些插件集成也可以被用于许多其他的DevOps测试工具。

3.易于设置和配置

该工具的安装、配置、以及升级过程都非常简单直接,只需几步便可搞定,而且用户还能参考各种支持文档。

4.给力的社区

作为一个具有丰富插件生态系统的开源项目,Jenkins的所有插件和功能都得到了社区的广泛支持。而且,其社区的参与度和成熟度都非常高。

5.提供REST API

Jenkins提供RESTful应用程序编程接口(API)来实现可扩展性。Jenkin的远程访问API具有XML、JSON、以及带有JSONP支持的Python,这三种不同的风格。您可以在Jenkins官网上找到有关Jenkins API的描述性页面。

6.支持并行测试

Jenkins能够智能地支持并行测试。您可以轻松地将其与不同的工具相集成,并得到构建成功与否的通知。开发人员甚至可以横跨不同的虚拟机,并行执行多个构建,从而提高其测试套件的效率。

7.轻松分配任务

Jenkins能够将各种任务分布在不同的计算机上运行,而不会影响到关联着这些任务的GUI(图形用户界面)上的同一个实例。

GitLab CI/CD简介

GitLab CI/CD(https://about.gitlab.com/)是一款免费且自托管的持续集成工具。它拥有一个社区版本,能够提供git存储库管理、问题跟踪、代码审查、Wiki、以及及时动态(activity feeds)等服务。用户可以在本地安装GitLab CI/CD,并将其与活动目录(Active Directory)及LDAP服务器连接,以实现安全授权和身份验证。

曾经作为一个独立项目的GitLab CI/CD,于2015年9月与GitLab 8.0发行版被集成到了GitLab的主软件中。如今,一台单独的GitLab CI/CD服务器可以管理25,000多名用户,并且能够设置成具有高可用性的“多活(multi-active)”服务器。

GitLab CI/CD和GitLab都是用Ruby与Go语言编写,并获得了MIT的许可。通过方便集成的存储库,GitLab CI/CD除了具有CI/CD工具的基本功能之外,还提供计划、打包、SCM、发布、配置和检查等服务。

在使用GitLab CI/CD时,您可以通过阶段命令来构建一系列阶段,并确保能以精确的顺序执行和实施。每个作业都是某个阶段的一部分,它们能够把相似的阶段自动与其他作业并行执行。在完成后,每个作业都会获得配置项,以便运行在Gitlab CI/CD的管道中。同时,您也可以检查在阶段内每个指定作业的状态。这恰好就是GitLab CI/CD与其他CI/CD工具的不同之处。

GitLab CI/CD的核心功能

作为同样广受欢迎的CI/CD工具,GitLab CI/CD拥有强大的文档,易于实施控制,以及良好的用户体验。下面,我们来看看GitLab CI/CD能够提供的一些核心功能。

1.高可用性部署

作为部署自动化最流行的免费CI/CD工具之一,GitLab CI/CD不但安装和配置起来非常简便,而且内置了在GitLab中免费自托管的CI工具。

2.Jekyll插件支持

Jekyll插件是一个静态网站生成器,具有对GitHub Pages的强大支持,且构建过程更加简单。Jekyll插件支持HTML文件和Markdown,并能够根据您的布局偏好创建一个完全静态的站点。而通过编辑_config.yml文件,您可以轻松地配置大多数网站的插件和主题。

3.里程碑设置

您可以使用GitLab CI/CD的里程碑功能,来设置跟踪、改进项目中的一系列问题,或是在存储库中表示或合并各种请求的方法。

4.自动扩展的CI运行程序

此类运行程序(runner)可以轻松地管理、并节省90%的EC2成本,尤其是在并行的测试环境中。同样,您也可以在存储库中使用各种组织级别或项目级别的运行程序。

5.问题跟踪和问题分组(Issue Shuffling)

GitHub通过出色的问题跟踪和问题分组功能,使您能够并行测试拉取请求和分支。而且,测试的结果可以显示在GitHub UI上,以便维护人员实现简单且无故障的监控。

6.使用访问控制管理的Git存储库

您可以轻松地管理带有访问权限的git存储库,向单个存储库上的协作者授予写入或读取的访问权限,以实现特定组织的成员对于存储库的细粒度访问控制。

7.活跃的社区支持

得益活跃的社区,GitLab CI/CD不但能够支持各种开箱即用,而且能够在各种插件的安装过程中无需进行额外的修改。

8.代码审查和合并请求

GitLab CI/CD不仅可用于构建代码,还能够检查或审查代码。它通过简单的合并请求与管理系统,来改善协作,并支持各种版本控制系统和构建环境。用户可以在GitHub项目中计划与实施协作,以扩展GitLab CI/CD。

Jenkins与GitLab CI/CD的比较

综合考虑Jenkins和GitLab CI/CD的各项特点,我们能够做出如下的比较表格:

特征

Jenkins

GITLAB CI/CD

开源还是商用

开源

开源

产品类别

自托管/本地部署

自托管/本地部署

内置CI/CD

按需支持CI/CD

具有内置功能,无需为CI/CD进行额外安装

独特的功能

插件

自动化DevOps,并允许将CI和代码管理保存在同处

产品种类

自托管/本地

SaaS/本地

支持与SLA

没有官方支持或SLA

提供

安装难度

简单

简单

自托管选项

该开源软件只能采取自我托管的方式

提供

建立管道

通过Jenkins Pipeline DSL来定制管道

提供

应用程序的性能监控

无法分析性能

可显示所有已部署应用程序的性能指标

生态系统

1000个社区插件

提供

全面的API

具有全面的API

在软件项目中提供深度集成的API

JavaScript的支持

集成方式

能与诸如SlackGitHub之类的工具集成

能与诸如GitHubKubernetes等第三方进行集成

CI/CD部署仪表板

能在项目中部分支持CICD功能

可以根据管道的历史记录和项目的最新状态,为每个用户部署一个仪表板

API

提供

提供了REST API和全新的GraphQL API

代码质量

通过Sonarqube等插件,提供代码质量检证

提供了检查代码质量的功能

对JavaScript的支持

集成方式能与诸如Slack和GitHub之类的工具集成能与诸如GitHub和Kubernetes等第三方进行集成

CI/CD部署仪表板能在项目中部分支持CI和CD功能可以根据管道的历史记录和项目的最新状态,为每个用户部署一个仪表板

API提供提供了REST API和全新的GraphQL API

代码质量通过Sonarqube等插件,提供代码质量检证提供了检查代码质量的功能

Jenkins与GitLab CI/CD之间的区别

  • 借助Gitlab CI/CD,您可以完全控制各种分支和Git存储库,进而确保代码免受各种突发的威胁。而在使用Jenkins时,您只能控制存储库,却无法完全控制分支。
  • Jenkins是内部托管(Hosted-Internally),且免费开源的。而Gitlab CI/CD是自托管(Self-Hosted)且免费的。
  • 在Gitlab CI/CD中,每个项目都有一个跟踪器。该跟踪器通过跟踪问题和执行代码审查,来提高效率。而在使用Jenkins工具时,用户的安装和配置过程得到了简化。

Jenkins的主要优点

  • 提供大型插件库
  • 自托管,包括能够完全控制工作区
  • 可轻松地调试运行程序,实现对工作区的完全控制
  • 易于设置节点
  • 易于部署代码
  • 良好的证书管理
  • 提供灵活且多变的功能
  • 支持多种不同的语言
  • 非常直观

Jenkins的主要缺点

  • 复杂的插件集成
  • 您必须自行设置小型项目
  • 缺乏对管道的整体跟踪与分析

Gitlab CI/CD的主要优点

  • 更好的Docker集成
  • 易于扩展运行程序
  • 可分阶段行执行作业
  • 提供有向无环图(directed acyclic graph)管道
  • 通过并发运行程序提供良好的可扩展性
  • 可合并与整合各种请求
  • 方便添加各种作业
  • 易于处理各种冲突问题
  • 具有良好的安全性和隐私政策

Gitlab CI/CD的主要缺点

  • 需要为每个作业定义、上载或下载各种工件(Artifacts)
  • 在实际合并发生之前,不太可能测试分支的合并状态
  • 目前尚不支持大期间(phases)中的子阶段(Stages)

如何进行选择?

综上所述,Jenkins和GitLab CI/CD各有优缺点。您在为DevOps测试选择CI/CD的自动化工具时,往往需要参考目标项目的规格与要求。具体而言,Jenkins可被用于持续集成,而Gitlab CI/CD可被用于代码的协作和版本控制。当然,您也应该参照它们的价格和内部熟练度。

原标题:Jenkins vs GitLab CI: Battle of CI/CD Tools ,作者:Rahul Jain

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

责任编辑:庞桂玉 来源: 51CTO
相关推荐

2020-10-21 14:10:28

工具测试开发

2023-03-13 14:46:32

CI/CD工具软件开发

2020-11-06 16:50:43

工具GitLab CICD

2023-04-27 08:18:25

GitLab开源

2023-04-18 08:17:11

GitLab持续集成

2024-05-20 11:23:18

2020-12-31 11:28:09

GitLabCICD

2019-11-07 09:00:39

Jenkins流水线开源

2022-08-31 22:25:53

微服务架构DevOPs

2023-04-26 11:29:58

Jenkins版本Java 11

2021-05-18 08:00:00

Kubernetes容器进程

2021-02-22 09:43:35

GitLabCICD

2024-08-07 10:14:35

2024-10-12 14:36:34

2022-02-22 09:00:00

软件开发CI/CD 管道工具

2018-09-07 11:12:19

CICD工具

2023-01-30 15:55:08

2021-05-13 18:23:53

Tekton云原生Kubernetes

2021-09-07 08:23:45

GitOpsCICD
点赞
收藏

51CTO技术栈公众号