GitLab CI 与。 詹金斯:异同 [2023]

软件开发是一个复杂的流程,它涵盖了规划、分析、设计、编码、测试、部署和维护等多个阶段。在这个旅程中,软件开发者需要借助各种工具来提高效率和质量。

在持续集成和交付(CI/CD) 领域,GitLab CI和Jenkins是两个非常著名的工具。CI/CD 是一套旨在自动化软件开发流程的方法。

本文将深入探讨 GitLab CI 与 Jenkins 的对比,包括定义、工作原理以及它们各自的核心功能。

GitLab CI 是什么?

GitLab 持续集成与交付是一项 DevOps 工具,它可以自动完成构建、测试代码以及部署到生产环境的整个过程。

GitLab CI 由两大部分组成:持续集成 (CI) 和持续交付/部署 (CD)。

持续集成的核心任务是自动化软件构建的各个环节。 它还提供代码审查反馈,并自动进行安全性和质量检测。 最后,CI 还会生成一个可用于部署到生产环境的发布包。

GitLab CI 的持续部署部分负责自动化配置基础设施,并管理问题、基础设施变更和版本控制。CD 为代码的逐步部署提供了环境,允许验证和监控所有变更,并支持在必要时回滚变更。

通过结合这两个功能,您可以在最少的人工干预下自动化整个软件开发生命周期(SDLC)。

简而言之,GitLab CI 的用途包括:

  • 存储和管理代码
  • 自动化 CI/CD 管道
  • 跟踪问题
  • 保护代码安全
  • 促进协作

使用 GitLab CI 的优点

  • 提高速度:使用 GitLab CI,您无需手动执行构建、测试和部署代码等繁琐的过程。
  • 提升代码质量:GitLab CI 可以在代码进入生产环境之前捕获代码中的缺陷和错误。
  • 增强安全性:GitLab CI 提供了多种安全功能,如漏洞扫描、秘密管理和代码扫描,以降低黑客攻击的风险。
  • 灵活性强:您可以根据开发团队的具体需求自定义 GitLab CI,并将其与各种主流语言和框架一起使用。
  • 自动化测试:您可以通过编写脚本来自动完成测试,无需手动运行。

Jenkins 是什么?

Jenkins 是一种可扩展的自动化服务器。这款开源工具可以帮助用户管理和构建持续集成与持续交付 (CI/CD) 管道。由于 Jenkins 有助于提高软件质量、可靠性和交付速度,因此它深受 DevOps 和软件工程师的喜爱。

Jenkins 在管道中运行一系列“作业”或步骤。一个作业包含按顺序执行的多个步骤。在 Jenkins 中,一个步骤可以是构建、测试、部署或软件开发生命周期中任何其他可以自动化的任务。

Jenkins 的应用可以归纳为以下几点:

  • 持续集成
  • 持续交付
  • 自动化测试
  • 监控和报告
  • 代码扫描
  • 任务调度

使用 Jenkins 的优点

  • 可扩展性强:Jenkins 可以适用于小型和大型应用程序。
  • 易于配置:Jenkins 拥有完善的资源支持,配置过程简单快捷。
  • 社区庞大:Jenkins 经过近二十年的发展,拥有非常庞大的用户社区。
  • 插件丰富:您可以利用各种插件来增强 Jenkins 的功能。
  • 支持并行作业执行:Jenkins 允许您同时执行多个任务,从而节省时间。

GitLab CI 和 Jenkins 的相似之处

  • 两者都支持持续集成和持续交付。
  • 两者都是开源工具。
  • 两者都拥有庞大的社区和用户群体。
  • 两者都支持多种编程语言和框架。
  • 两者都可以自动化软件开发生命周期中的各种任务。
  • 两者都拥有丰富的插件和扩展生态系统。

GitLab CI 与 Jenkins:功能比较

功能 GitLab CI Jenkins
开源
语言支持 多种语言 多种语言
定价 大多数功能在免费计划中可用,也提供具有更多功能的付费计划。 免费
成熟度 较新平台,创建于 2014 年。 Jenkins 的前身是 Hudson,于 2011 年分叉并更名为 Jenkins。
易用性 易于使用 对于初学者来说可能比较复杂。
托管 内部和外部 内部和外部
先决条件 Node.JS, Git, Ruby, Go Java 运行时环境

GitLab CI 与 Jenkins:详细比较

虽然 GitLab 和 Jenkins 有相似之处,但它们在管理 CI/CD 流程的方式上存在明显的差异。以下是一些关键领域的对比:

架构

Jenkins 采用主从架构来管理构建任务。

  • Jenkins master 负责调度构建作业,并将它们分发给 worker 进行实际执行。它还会监控 worker 的状态,收集并汇总 Web 仪表板中的所有构建结果。
  • Jenkins worker 是在远程计算机上运行的 Java 可执行文件。 也被称为构建代理,它会侦听来自 master 的所有请求并执行它们。您可以拥有多达 100 多个节点,并根据需要添加或删除 worker。

GitLab CI 是 GitLab 的一部分,GitLab 是一个基于 Web 的界面,用于管理存储库、合并请求等。GitLab CI 包括以下组件:

  • GitLab CI/CD 工具用于管理构建过程。
  • GitLab Runner 执行所有 CI 作业。它是一个轻量级进程,可以在云端或您的计算机上运行。
  • CI/CD 管道配置定义在 .gitlab-ci.yml 文件中。此文件指定管道中的所有作业、阶段和步骤。

插件

Jenkins 拥有超过 1800 个由社区贡献的插件。这些插件覆盖了不同的领域,如构建、部署和自动化项目。用户可以自定义他们的 CI/CD 管道,并扩展 Jenkins 的功能。

开发人员可以在 Jenkins 完善的文档支持下创建自定义插件,并将其添加到 Jenkins 的插件目录中。Jenkins 拥有庞大而活跃的社区,为插件的开发提供了有力支持。

GitLab CI 允许您连接/集成外部服务以增强其功能。与 Jenkins 相比,它的插件/扩展库较小,但仍在快速增长。由于 GitLab CI 是 GitLab 的一部分,因此它拥有许多内置的功能。

用户可以通过 .gitlab-ci.yml 文件自定义/配置他们的工作流程,指定所有作业、阶段和步骤。

流水线

Jenkins 允许您同时使用声明式和脚本化的管道语法。您可以选择通过 Web UI 或 Jenkinsfile 来使用这两种方法,后者是更推荐的方式。您可以将管道定义为 Jenkinsfiles,并将它们存储在源代码存储库中。Jenkins 内置了一个基于 Web 的 GUI,用于监控和可视化管道的执行情况。

GitLab CI 使用 .gitlab-ci.yml 文件来定义所有管道。这个基于 YML 的配置文件存储在项目的根目录中。.gitlab-ci.yml 因其简单易懂的语法而闻名,包含一系列命令和预定义的关键字,可以满足大多数常见的 CI/CD 任务需求。GitLab CI 与其他 GitLab 功能集成,例如源代码管理、问题跟踪、代码审查和合并请求等。

如何安装 Jenkins

在您的计算机上安装 Jenkins 之前,您需要安装 Java 运行时环境(JRE)。请根据您的操作系统,从官方网站下载 Java。 这里,我们将使用 Ubuntu 系统来演示安装过程。

如果您使用的是其他操作系统,请参考我们的 Jenkins 安装文章,并按照列出的步骤进行操作。

对于 Ubuntu 系统,请按照以下步骤操作:

第一步:检查是否已安装 JRE。运行以下命令:

java -version

如果已安装,您将看到类似以下的内容:

我已经安装了 “17.0.6” 版本,您可能安装了更高版本。

第二步:使用以下命令将 GPG 密钥导入您的系统:

curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee 
  /usr/share/keyrings/jenkins-keyring.asc > /dev/null

第三步:使用以下命令添加 Jenkins 的软件存储库:

echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] 
  https://pkg.jenkins.io/debian-stable binary/ | sudo tee 
  /etc/apt/sources.list.d/jenkins.list > /dev/null

第四步:使用以下命令更新您的系统:

sudo apt update

第五步:使用以下命令安装 Jenkins:

sudo apt install jenkins -y

第六步:使用以下命令检查 Jenkins 是否已安装:

sudo systemctl status jenkins

如果已安装,您将看到类似以下的内容:

按键盘上的 ctrl+z 退出并继续下一步。

第七步:修改系统上的防火墙和 Jenkins。使用以下命令:

sudo ufw allow 8080

第八步:检查状态:

sudo ufw status

第九步:如果在上一步中状态显示为 “Inactive”,请使用以下命令启用它:

sudo ufw enable

第十步:在浏览器中输入以下内容,打开 Jenkins:

http://localhost:8080

第十一步:运行以下命令,获取“管理员密码”:

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

第十二步:解锁 Jenkins。

复制终端上显示的密码,粘贴到您在第十步中打开的“管理员密码”对话框中,然后单击“继续”。

新窗口将提示您安装插件。您目前不需要很多插件,可以选择默认插件并继续下一步。

第十三步:创建您的账户,然后点击“保存并继续”。

第十四步:完成初始配置,开始使用 Jenkins。

如何安装 GitLab CI

GitLab CI 是 GitLab 的一部分。要使用 GitLab CI,您首先需要安装 GitLab Runner,它是运行所有作业的代理,然后将所有作业发送到 GitLab。

我们这里使用 Ubuntu 系统演示安装过程。 如果您使用的是其他操作系统,请参考官方文档。对于 Ubuntu 系统,请按照以下步骤操作:

第一步:更新和配置您的系统:

sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl

您可以配置电子邮件解决方案来发送更新,或者跳过此步骤。

第二步:添加 GitLab 包存储库

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash

第三步:配置您的 GitLab 账户。

托管 GitLab 有多种选择。请根据您的选择按照说明进行操作。

第四步:浏览主机名并登录。在您的终端上运行以下命令,获取您的密码:

/etc/gitlab/initial_root_password 

可选:设置通信首选项以接收来自 GitLab 的产品更新和新闻。

Jenkins 的局限性

  • 为大型项目设置 Jenkins 可能比较复杂。
  • 如果配置不当,Jenkins 可能容易受到安全攻击。
  • 使用 Jenkins 时,扩展大型项目可能具有挑战性。
  • Jenkins 在运行大量并发构建时会消耗大量的资源。

GitLab CI 的局限性

  • 对于大型项目来说,GitLab CI 的配置可能很复杂。
  • 它依赖于 GitLab。
  • 对于大型项目,可扩展性是一个问题。
  • 与 Jenkins 相比,其插件生态系统相对较小。

作者的观点

GitLab CI 和 Jenkins 都是软件开发生命周期中非常出色的工具。 如果我需要一个更成熟的平台和对自定义的完全控制,我会选择 Jenkins。另一方面,如果我更看重用户界面并需要从 GitLab 集成中获益,我会选择 GitLab CI。

相信现在您已经能够区分 GitLab CI 和 Jenkins 的区别了。虽然这两个工具都旨在执行类似的功能,但它们在功能和实现方式上存在差异。选择哪个工具取决于您项目的特性、您的技能、偏好和口味。

您现在可以查看这些 Jenkins 托管平台。