GitLab — 基础、功能和 CI/CD

作者: IT Sectr 发布日期: 2026-05-09 阅读时间: 8 分钟

GitLab — 是一个开源的 DevOps 平台,将 Git 仓库、内置 CI/CD、容器注册表和安全工具整合到一个统一的应用程序中。由 Sid Sijbrandij 和 Dmitriy Zaporozhets 于 2011 年创立,该平台提供云服务 (GitLab.com) 和自管理版本 (Self-Managed) 供企业环境使用。根据 GitLab, 2024 的数据,该平台拥有超过 3000 万注册用户。

要点

  • GitLab — 是一个集 Git、CI/CD、注册表和安全性于一体的统一 DevOps 平台。
  • GitLab CI/CD 使用 .gitlab-ci.yml 中的 YAML 配置来描述流水线。
  • Self-Managed — 可以在自己的服务器上安装 GitLab,没有运行器限制。
  • 内置 Container Registry 和 Dependency Proxy 加速容器化应用程序的构建。
  • Security Scanning 包括 SAST、DAST、容器扫描和依赖项扫描。

什么是 GitLab?

GitLab — 是一个采用 MIT 许可证的完整开源 DevOps 平台。与 GitHub 通过集成连接不同服务不同,GitLab 为整个开发生命周期提供单一工具:从代码管理和代码审查到 CI/CD、监控、安全和部署。该平台不需要第三方服务来处理大多数 DevOps 任务。

GitLab 的历史始于 2011 年,当时是乌克兰开发者的一个内部项目。第一个公开版本于 2011 年 9 月发布,2015 年 GitLab 成为 GitLab.com 上的第一个项目,推出了云托管服务。2017 年,GitLab 经历了一个痛苦但具有示范意义的迁移过程——将整个基础设施从 Azure 迁移到 Google Cloud,整个过程在线直播并记录在一系列文章中。

GitLab 的架构由三个主要组件组成:GitLab Rails(基于 Ruby on Rails 的 Web 应用程序)、GitLab Shell(通过 SSH 处理 Git 操作)和 Gitaly(用于访问 Git 数据的 gRPC 服务器)。CI/CD 通过 GitLab Runner 提供——这是一个独立的应用程序,安装在构建服务器上,在隔离的环境(Docker、Kubernetes、VirtualBox)中执行任务。

GitLab CI/CD:流水线和运行器

GitLab CI/CD — 是一个内置的持续集成和交付系统,是该平台的关键优势。与 GitHub Actions 不同,GitLab CI/CD 从一开始就内置于架构中,无需单独配置:每个项目在仓库根目录添加 .gitlab-ci.yml 文件后会自动获得 CI/CD 功能。

流水线 (pipeline) 由按顺序或并行执行的阶段 (stages) 组成:build → test → deploy。每个阶段包含一个或多个在运行器上执行的任务。如果某个阶段中的任务失败,则整个阶段被标记为失败,后续阶段默认不会执行。以下是移动项目的流水线示例:

yaml
# .gitlab-ci.yml
stages:
  - build
  - test
  - deploy

build-android:
  stage: build
  image: openjdk:17-jdk
  script:
    - ./gradlew assembleDebug
  artifacts:
    paths:
      - app/build/outputs/

unit-tests:
  stage: test
  script:
    - ./gradlew testDebugUnitTest

deploy-firebase:
  stage: deploy
  script:
    - firebase appdistribution:distribute app.apk

GitLab Runner 支持多种执行器 (executor):Docker(推荐)、Kubernetes、SSH、VirtualBox 和 Parallels。最流行的选择是 Docker 执行器,它在单独的容器中运行每个任务。运行器可以注册为特定于某个项目,或作为整个组的共享运行器。GitLab.com 提供免费的共享运行器,每月限制 2000 分钟

CI/CD 高级功能

GitLab CI/CD 支持手动触发 (when: manual)、延迟触发 (when: delayed)、并行执行 (parallel: 5)、矩阵 (matrix)、动态流水线 (child pipelines) 和多级流水线 (parent-child)。这允许构建复杂场景:例如,为单仓库中的每个模块动态生成流水线,或为不同 Android 架构 (arm64, x86_64) 运行并行构建。

GitLab 与 GitHub:主要区别

GitLab 和 GitHub — 是 Git 平台市场上的两个主要竞争对手,但它们的理念和架构有着根本的不同。GitHub 侧重于开放社区、集成生态系统和社交功能(fork、star)。GitLab 专注于完整的 DevOps 生命周期,并提供开箱即用的所有工具:从规划到监控。

主要的架构差异:GitLab — 是一个单一的整体应用程序,开发者可以完整安装。所有功能(CI/CD、Container Registry、Security Scanning、Pages)都是内置的,安装后即可使用。GitHub 是一个带有 API 的平台,大多数功能通过集成第三方服务实现:Travis CI、CircleCI、Jenkins、SonarQube。下表比较了关键特性:

标准GitLabGitHub
CI/CD内置,YAML 在 .gitlab-ci.yml 中Actions,YAML 在 .github/workflows 中
自托管免费 (Community Edition)付费 (Enterprise Server)
许可证MIT(开源代码)专有
注册表Container + Dependency ProxyPackages(容器 + 包)
安全SAST、DAST、Fuzzing、Container ScanningDependabot + CodeQL(有限)

GitLabGitHub 之间的选择取决于团队的需求。如果优先考虑快速部署、零配置和开放社区——选择 GitHub。如果需要完全控制基础设施、自托管和内置安全性——GitLab 更可取。根据 Stack Overflow (2024) 的调查,90% 的开发者使用 GitHub,33% 使用 GitLab(通常两者同时使用)。

自管理 GitLab:在自己的服务器上安装

自管理 GitLab(原名为 On-Premises)允许将平台安装在自己的服务器上,并完全控制数据、基础设施和正常运行时间。这对于有合规要求的组织尤其重要:金融领域、政府机构、医疗机构,这些机构的数据不能存储在第三方服务器上。

GitLab 安装支持 Ubuntu、Debian、CentOS 和通过 Docker。官方 Omnibus 软件包包含所有组件:Web 服务器 (NGINX)、数据库 (PostgreSQL)、缓存 (Redis)、Git 处理器 (Gitaly) 和后台进程。最低要求:4 GB RAM 和 2 CPU,适用于最多 100 人的团队。对于高负载的大型安装,建议将组件分离到不同的服务器上。

bash
# 通过 Omnibus 在 Ubuntu 上安装 GitLab CE
curl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh
sudo bash script.deb.sh

# 安装软件包
sudo EXTERNAL_URL="https://gitlab.example.com" apt install gitlab-ce

# 查看状态
sudo gitlab-ctl status
sudo gitlab-ctl tail

自管理 GitLab 没有 CI/CD 分钟数限制——所有运行器都属于组织,其性能仅受自身硬件限制。此外,还提供区域的 Geo 复制、审计日志、IP 封锁以及与企业的 LDAP/SAML 提供商集成。GitLab 每月(22 日)发布更新,包含新功能和安全修复。

GitLab 内置安全工具

GitLab 的安全性 内置于平台层面,包括在流水线每个阶段运行的多个扫描器。SAST(静态应用程序安全测试)在不执行应用程序的情况下分析源代码中的漏洞,支持超过 15 种语言,包括 Java、Kotlin、Swift、Python 和 JavaScript。DAST(动态应用程序安全测试)从内部测试正在运行的 Web 应用程序的漏洞。

其他工具:Container Scanning 检查 Docker 镜像基础层中的漏洞;Dependency Scanning 分析项目依赖项并警告已知的 CVE;Secret Detection 查找意外提交的 API 密钥、密码和令牌;Fuzz Testing 使用无效数据执行自动测试以发现不明显的错误。所有扫描结果显示在统一的 Security Dashboard 中。

GitLab 还提供 Compliance——用于满足法规要求的工具。Compliance Dashboard 显示所有项目的合规状态,Audit Events 记录管理员和开发者的每个操作,Compliance Frameworks 允许对特定项目组强制执行配置策略。这使得 GitLab 成为企业环境中有严格安全要求的热门选择。

Container Registry 和 Dependency Proxy

GitLab Container Registry — 是一个内置的 Docker 注册表,与 CI/CD 集成。在流水线中构建 Docker 镜像后,可以立即将其发布到 Registry,使用环境变量 CI_REGISTRYCI_REGISTRY_USER。Registry 支持拉取缓存、标记、清理策略和直接在注册表中进行漏洞扫描。

Dependency Proxy — 是一种从外部注册表(Docker Hub、Quay、GCR)缓存容器和镜像的机制。当流水线请求镜像 ubuntu:latest 时,GitLab 首先检查其缓存——如果镜像已下载,则不会重新下载。这减少了对外部注册表的负载,加速了流水线,并防止了 Docker Hub 的速率限制。

对于移动开发者,GitLab 提供 GitLab Pages 用于托管文档和测试报告。运行测试后,可以将构建产物(HTML 报告、截图、日志)发布为 Pages,并获取链接发送给 QA 团队。这比将报告上传到云存储更方便,因为所有内容都托管在同一个 GitLab 项目内。

GitLab API 和 Webhooks

GitLab API(REST 和 GraphQL)提供对平台所有资源的访问:项目、用户、流水线、合并请求、注册表。API 用于自动化:从模板创建项目、指定审查者、获取流水线状态。Webhooks 允许在事件发生时向外部系统发送 HTTP 通知:推送、合并、创建问题。Webhooks 可与 Mattermost、Slack、Telegram 和内部监控系统集成。

GitLab Pages 用于移动文档

GitLab Pages 自动从仓库发布静态网站。对于移动项目,Pages 便于托管 API 文档、测试覆盖率报告和 lint 分析结果。发布在成功流水线后自动进行——只需在 .gitlab-ci.yml 中指定一个 deploy 步骤并发布到 Pages。结果可在 https://namespace.gitlab.io/project-name 访问。

常见问题

GitLab 简单来说是什么?

GitLab — 是一个用于存储代码和自动化构建的程序。开发者上传代码,GitLab 自行测试、构建应用程序并将其发送到服务器。

GitLab 是免费还是付费?

GitLab CE (Community Edition) 是完全免费且开源的。GitLab EE (Enterprise Edition) 有付费套餐,每位用户每月 19 美元起,提供额外的安全功能。

GitLab Runner 和流水线有什么区别?

Runner — 是执行任务 (jobs) 的代理。流水线 — 是在 .gitlab-ci.yml 中描述的任务序列。Runner 在服务器上实际执行代码,而流水线定义执行什么以及以什么顺序执行。

可以将仓库从 GitHub 迁移到 GitLab 吗?

可以,GitLab 提供内置的从 GitHub、Bitbucket 和其他平台的导入器。导入操作可迁移代码、提交、分支、问题、Wiki 和合并请求,并最大程度地保留历史记录。

如何为 iOS 项目配置 GitLab CI?

对于 iOS,需要 macOS 运行器(物理 Mac 或云端 Mac)。流水线包括安装 Xcode、运行 xcodebuild 进行构建、执行测试以及导出 .ipa 文件用于 TestFlight。

总结

  • GitLab — 是一个集 Git、CI/CD、安全性和注册表于一体的统一开源 DevOps 平台。
  • GitLab CI/CD 在 .gitlab-ci.yml 中描述流水线,支持 Docker、Kubernetes 和矩阵构建。
  • Self-Managed 允许在自己的服务器上安装 GitLab,没有分钟数和用户限制。
  • 内置安全工具 包括 SAST、DAST、Dependency Scanning 和 Secret Detection。
  • Container RegistryDependency Proxy 加速构建并减少外部注册表的负载。
  • GitLab 比 GitHub 更适合需要完全控制基础设施和数据的组织。
  • 开始使用 在 GitLab.com 上创建项目并添加 .gitlab-ci.yml — 基本配置不到一小时即可完成。

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读