作为一位DevOps测试专家,您往往需要根据项目、预算和其他方面的要求,来选择恰当的工具。下面,我将对Jenkins和GitLab CI/CD进行深入的评估与比较。
Jenkins介绍
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能够提供的哪些核心功能。
免费、开源且易于安装
Jenkins可以与Docker结合起来,为自动化作业提供高效性和一致性。它也可以在诸如:Apache Tomcat和GlassFish之类的Java容器中作为servlet运行。此外,它还提供各种文档,来指导用户的整个安装过程。
广泛的插件生态系统
与其他CI/CD工具相比,Jenkins的插件生态系统更加成熟。插件的范围含括了从特定语言的开发工具,到各种构建工具。用户可以在此基础上免费进行定制。此外,这些插件集成也可以被用于许多其他的DevOps测试工具。
易于设置和配置
该工具的安装、配置、以及升级过程都非常简单直接,只需几步便可搞定,而且用户还能参考各种支持文档。
给力的社区
作为一个具有丰富插件生态系统的开源项目,Jenkins的所有插件和功能都得到了社区的广泛支持。而且,其社区的参与度和成熟度都非常高。
提供REST API
Jenkins提供RESTful应用程序编程接口(API)来实现可扩展性。Jenkin的远程访问API具有XML、JSON、以及带有JSONP支持的Python,这三种不同的风格。您可以在Jenkins官网上找到有关Jenkins API的描述性页面。
支持并行测试
Jenkins能够智能地支持并行测试。您可以轻松地将其与不同的工具相集成,并得到构建成功与否的通知。开发人员甚至可以横跨不同的虚拟机,并行执行多个构建,从而提高其测试套件的效率。
轻松分配任务
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能够提供的一些核心功能。
高可用性部署
作为部署自动化最流行的免费CI/CD工具之一,GitLab CI/CD不但安装和配置起来非常简便,而且内置了在GitLab中免费自托管的CI工具。
Jekyll插件支持
Jekyll插件是一个静态网站生成器,具有对GitHub Pages的强大支持,且构建过程更加简单。Jekyll插件支持HTML文件和Markdown,并能够根据您的布局偏好创建一个完全静态的站点。而通过编辑_config.yml文件,您可以轻松地配置大多数网站的插件和主题。
里程碑设置
您可以使用GitLab CI/CD的里程碑功能,来设置跟踪、改进项目中的一系列问题,或是在存储库中表示或合并各种请求的方法。
自动扩展的CI运行程序
此类运行程序(runner)可以轻松地管理、并节省90%的EC2成本,尤其是在并行的测试环境中。同样,您也可以在存储库中使用各种组织级别或项目级别的运行程序。
问题跟踪和问题分组(Issue Shuffling)
GitHub通过出色的问题跟踪和问题分组功能,使您能够并行测试拉取请求和分支。而且,测试的结果可以显示在GitHub UI上,以便维护人员实现简单且无故障的监控。
使用访问控制管理的Git存储库
您可以轻松地管理带有访问权限的git存储库,向单个存储库上的协作者授予写入或读取的访问权限,以实现特定组织的成员对于存储库的细粒度访问控制。
活跃的社区支持
得益活跃的社区,GitLab CI/CD不但能够支持各种开箱即用,而且能够在各种插件的安装过程中无需进行额外的修改。
代码审查和合并请求
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的支持 |
是 |
是 |
集成方式 |
能与诸如Slack和GitHub之类的工具集成 |
能与诸如GitHub和Kubernetes等第三方进行集成 |
CI/CD部署仪表板 |
能在项目中部分支持CI和CD功能 |
可以根据管道的历史记录和项目的最新状态,为每个用户部署一个仪表板 |
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】