06. CI/CD 到底是什么?GitLab 流水线架构从概念到实战

「GitLab」系列已发布: 00. GitLab 不只是代码托管:一套 DevOps 平台的 6 大核心能力 | 01. GitLab 怎么装最省心?Omnibus/Docker/K8s 三种姿势 | 02. 装完 GitLab 先配啥?管理员视角的初始化设置清单 | 03. GitLab 角色搞不清?Member/Maintainer/Owner 权限全解 | 04. 从零建好第一个 GitLab 项目:权限、变量、CI 配置入门 | 05. GitLab MR 代码审查:Code Review 最佳实践 | 06. CI/CD 到底是什么?GitLab 流水线架构从概念到实战(本文) | 07. Runner 装不好?GitLab Runner 单机/分布式/高可用全攻略

Pipeline、Stage、Job、Runner 这些概念绕晕人?本文用一张架构图讲清 GitLab CI/CD 的运作原理,从概念直通实战。

前置条件

已完成安装部署(第 01 篇),对 GitLab 平台有基本了解。这篇是 CI/CD 系列的开篇,侧重概念和架构。

一、CI/CD 是什么

持续集成(Continuous Integration)+ 持续交付/部署(Continuous Delivery/Deployment)是现代软件开发的核心实践。

1.1 核心概念

flowchart LR subgraph CI["持续集成 CI"] A[代码提交] --> B[自动构建] B --> C[自动测试] C --> D{测试通过?} D -->|是| E[合并代码] D -->|否| F[修复问题] F --> A end subgraph CD["持续交付/部署"] E --> G[自动部署到 staging] G --> H{人工审批?} H -->|是| I[自动部署到 production] H -->|否| I I --> J[监控反馈] end

1.2 关键术语

术语 说明
Pipeline 一次完整的 CI/CD 流程
Job Pipeline 中的单个任务
Stage Job 的逻辑分组(如 build、test、deploy)
Runner 执行 Job 的引擎
Artifact Job 的输出产物
Cache 跨 Job 共享的缓存数据

二、GitLab CI/CD 架构

2.1 核心组件

graph TB subgraph "开发者" Dev[开发者] end subgraph "GitLab" Repo[代码仓库] Runner[GitLab Runner] API[GitLab API] end subgraph "执行环境" Docker[Docker 容器] VM[虚拟机] K8s[Kubernetes] end Dev -->|push 代码| Repo Repo -->|触发 Pipeline| API API -->|调度| Runner Runner -->|执行 Job| Docker Runner -->|执行 Job| VM Runner -->|执行 Job| K8s

2.2 Pipeline 执行流程

sequenceDiagram participant Dev as 开发者 participant GitLab as GitLab Server participant Runner as GitLab Runner participant Docker as Docker 容器 Dev->>GitLab: push 代码到仓库 GitLab->>GitLab: 解析 .gitlab-ci.yml GitLab->>Runner: 调度匹配的 Job Runner->>Docker: 启动容器 Docker->>Docker: 执行脚本 Docker->>Runner: 返回执行结果 Runner->>GitLab: 更新 Job 状态 GitLab->>Dev: 发送通知

三、.gitlab-ci.yml 入门

3.1 最简单的配置


# .gitlab-ci.yml
stages:          # 定义阶段
  - build
  - test
  - deploy

build_job:       # 构建阶段
  stage: build
  script:
    - echo "编译代码"
    - make build

test_job:        # 测试阶段
  stage: test
  script:
    - echo "运行测试"
    - make test

deploy_job:      # 部署阶段
  stage: deploy
  script:
    - echo "部署到生产"
    - make deploy
  only:
    - main       # 只在 main 分支部署

3.2 关键指令

指令 说明
stages 定义 Pipeline 的阶段顺序
script Job 执行的命令
image 使用的 Docker 镜像
before_script 执行 script 前的准备命令
after_script 执行 script 后的清理命令
rules 条件判断是否执行 Job
only/except 分支过滤
cache 缓存配置
artifacts 产物配置
needs Job 依赖关系
environment 部署环境

四、Pipeline 状态

flowchart LR A[无 Pipeline] --> B[created] B --> C[pending] C --> D{Runner 接受?} D -->|否| C D -->|是| E[running] E --> F{执行结果?} F -->|成功| G[success] F -->|失败| H[failed] F -->|取消| I[canceled] F -->|跳过| J[skipped] H --> K[手动重试] K --> E

五、常见问题

5.1 Pipeline 不触发

  • 检查 .gitlab-ci.yml 是否存在且语法正确
  • 检查触发的分支是否匹配 rules 或 only
  • 检查是否有 Runner 在线且匹配标签

5.2 Job 卡在 pending

  • 检查 Runner 是否在线
  • 检查 Runner 的 tag 是否与 Job 匹配
  • 检查 Runner 的并发限制

5.3 构建失败

  • 查看详细日志
  • 检查依赖是否安装
  • 检查环境变量是否正确

六、文章引用

📌 本文首发于微信公众号 【运维知识点滴】——专注运维实战干货,微信搜索“运维知识点滴”或扫下方二维码关注,更新不迷路。

微信公众号【运维知识点滴】 微信小程序【A5单据合并&大试卷拆分转A4打印】
运维实战干货 · 关注追更 Word 转 PDF · 试卷/发票打印神器 · 免费
运维实战干货 · 关注追更 Word 转 PDF · 试卷/发票打印神器 · 免费

💡 小程序【A5单据合并&大试卷拆分转A4打印】是干嘛的? 一个 Word 转 PDF 的打印神器,专治“文档版式和打印机对不上”:

  • A3 试卷打不出来? 学校发的电子版试卷多是 A3,家用打印机只吃 A4——上传 Word 一键转换:可缩到一页 A4(页数不变),也可对半拆成两张 A4(1:1 原大、字更清晰),两种模式自选;
  • 版式不乱:真实渲染引擎原样转换、绝不重排内容,转出的 PDF 和原 Word 排版一致,公式/表格/图片不跑版;
  • 两张 A5 单据拼一张 A4:出租车票、火车票等报销凭证拼版后,一次打印、整齐粘贴;
  • 隐私省心:无需注册,转换结果留存 5 天、最多下载 5 次即自动删除,不留任何历史记录;
  • 微信扫码即用,免费、免安装,支持 doc / docx(≤50MB)。

上一篇:05. GitLab MR 代码审查:Code Review 最佳实践 | 下一篇:07. Runner 装不好?GitLab Runner 单机/分布式/高可用全攻略