Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

GitLab FAQ

内容:基础、高级、架构、Runner、CI/CD、运维、安全合规等

一、GitLab 基础概念

1. GitLab 是什么?与 GitHub 的区别?

GitLab 是一个 基于 Git 的代码托管 + DevOps 平台,集成 代码管理、CI/CD、Issue、WIKI、自动化、安全扫描、部署 等功能。

与 GitHub 区别:

项目 GitLab GitHub
部署方式 支持自建(开源版) 主要 SaaS
CI 内置 GitLab CI 需要 GitHub Actions
权限 & 项目管理 更企业化 更开发者社区化
DevOps 集成 One-Stop 方案 需要整合其他工具

2. GitLab CE 和 EE 的区别?

CE(Community Edition):开源、免费,满足中小团队

EE(Enterprise Edition):闭源,提供高级功能,如:

  • 高级权限与审计日志
  • 合规治理
  • 安全扫描、SAST、DAST
  • 集群架构、Geo 复制

3. GitLab 的核心组件有哪些?

  • Gitaly:Git 存储读写服务
  • PostgreSQL:数据库
  • Redis:缓存与队列
  • Sidekiq:后台任务
  • Puma:HTTP 请求处理
  • Nginx:反向代理
  • GitLab Shell:处理 SSH
  • Prometheus + Grafana:监控
  • Runner:执行 CI/CD

二、GitLab 权限与项目管理

4. GitLab 权限等级有哪些?

  • Guest
  • Reporter
  • Developer
  • Maintainer
  • Owner(Group)

5. Protected Branch 是什么?

用于保护重要分支(如 master、main、release)

限制:

  • 谁可以 push?
  • 谁可以合并?
  • 谁可以做 force-push(通常禁止)

6. Merge Request 合并策略有哪些?

  • Merge commit
  • Squash merge
  • Rebase and merge

三、GitLab CI/CD

7. 什么是 GitLab CI?核心概念?

CI/CD 由 .gitlab-ci.yml 驱动

核心概念:

  • Pipeline:整个流水线
  • Stage:阶段
  • Job:任务
  • Runner:执行器
  • Artifacts:产物
  • Cache:缓存
  • Variables:变量
  • Environment:环境(如 dev/test/prod)

8. Runner 有几种类型?

Runner 类型 特点
shared runner 整个 GitLab 共用
group runner 某个 group 使用
project runner 某个项目使用
specific runner 单 Runner 绑定项目
autoscaling runner 自动创建 VM / K8S Pod

9. Runner Executor 执行器有哪些?

Executor 描述
shell 在宿主机执行
docker 最常用,隔离好
docker+machine 自动扩容
kubernetes 企业级常用
ssh 远程执行
virtualbox 已不常用

10. .gitlab-ci.yml 的结构是什么?

最标准简答:

stages:
  - build
  - test
  - deploy

variables: {}

build_job:
  stage: build
  script:
    - make build

四、Artifacts、Cache、Dependencies

11. Artifacts 与 Cache 的区别?

项目 Artifacts Cache
目的 传递文件到下一 Job 加速/缓存依赖
生命周期 Pipeline 结束后可下载 在 Runner 存活期间
使用场景 build -> test -> deploy node_modules、.m2、pip cache

12. 如何在 job 之间传文件?

使用 artifacts:

build:
  stage: build
  artifacts:
    paths:
      - dist/

五、GitLab 进阶:Deploy 与 Environment

13. GitLab CI 如何做部署?

通过:

  • environment
  • deploy 阶段
  • k8s 集成
  • 或调用外部脚本

14. GitLab Auto DevOps 是什么?

GitLab 提供的自动化 CI/CD 模板(自动 build -> test -> deploy -> monitor)

依赖:

  • K8s 集群
  • Helm
  • Docker Registry

六、GitLab 容器 Registry

15. GitLab 如何作为 Docker Registry?

推送流程:

docker login registry.gitlab.com
docker build -t registry.gitlab.com/group/project/app:tag .
docker push registry.gitlab.com/group/project/app:tag

自建版需开启:

registry['enable'] = true

16. 如何在 CI 中登录 Registry?

使用 $CI_REGISTRY_USER、$CI_REGISTRY_PASSWORD 自动登录。

七、GitLab 安全与审计

17. GitLab 如何实现 Secret 管理?

  • CI/CD Variables
  • Masked(隐藏)
  • Protected(仅可在 protected 分支使用)

18. GitLab 如何避免敏感信息泄露?

  • 强制 MR Review
  • Protected variables
  • 防止 force push
  • GitLab secret detection(EE)

八、GitLab 运维

19. GitLab 的备份方式?

gitlab-backup create
  • 备份:数据 + 配置
  • 可以 rsync Git 存储
  • 支持对象存储(MinIO/S3)

20. GitLab 如何升级?需要注意什么?

注意:

  • 升级路径不能跨太大版本
  • 查看 release notes
  • 备份
  • Zero downtime 依赖 EE

21. GitLab 性能优化方式?

  • Gitaly 与 Git 存储独立
  • Sidekiq 分离
  • Redis 集群
  • PostgreSQL 外置 + HA
  • 使用对象存储(MinIO / S3)

九、GitLab Runner

22. Runner 为什么 Pending?

常见原因:

  • Runner 没 tag,job 需要 tag
  • Runner offline
  • Runner 没有匹配 executor
  • 并发数太小
  • job 限制 only/except 规则

23. 如何减少 Pipeline 执行时间?

  • 并行 job
  • 使用 cache
  • 使用 artifacts 传递产物
  • 只构建 changed 路径(rules)
  • 使用 Docker 缓存层

十、综合场景

24. 如何实现多环境(dev/test/prod)部署?

通过 environment:

deploy_dev:
  stage: deploy
  environment:
    name: dev
  script: ./scripts/deploy-dev.sh

25. 如何做基于 Tag 的自动发布?

rules:
  - if: '$CI_COMMIT_TAG'
    when: always

26. 如何按微服务拆分 CI?

  • Monorepo 使用 rules: changes
  • 每个目录对应一组 job
  • 减少不必要构建

27. 如何构建、推送、部署 Docker 镜像?

标准答案:

build:
  stage: build
  script:
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

28. CI/CD 如何实现蓝绿部署?

  • 需要 K8S
  • 两套 service / deployment
  • GitLab CI 调 Helm 切换版本

十一、进阶

29. GitLab CI 与 Jenkins 的对比?

核心区别总结:

对比项 GitLab CI Jenkins
配置方式 YAML(代码即流程) Web UI / Jenkinsfile
依赖 GitLab 内置 独立平台
插件 少,但稳定 插件生态大但易出问题
使用场景 中小团队、K8S 场景强 企业级、大规模插件扩展
架构 更轻量 更灵活、但要维护

30. GitLab + Kubernetes CI/CD 的优势?

  • 原生支持
  • Auto DevOps
  • Review Apps
  • Canary / Blue-Green
  • 容器化构建更快更稳定