软件开发是一个复杂的流程,它涵盖了规划、分析、设计、编码、测试、部署和维护等多个阶段。在这个旅程中,软件开发者需要借助各种工具来提高效率和质量。
在持续集成和交付(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 托管平台。