GitLab CI/CD学习教程(第三章Pipeline)
🚀从零开始,结合具体场景和示例,让你彻底掌握 GitLab CI/CD 的配置!

1 定义
⭐ 什么是Pipeline
在 GitLab CI/CD 中,Pipeline 是自动化的构建、测试和部署过程的集合。它是 GitLab CI/CD 的核心概念之一,帮助开发者通过配置文件定义一系列的工作流,并自动执行这些流程。
一个 Pipeline 通常由多个 Stage(阶段)和 Job(任务)组成,它们按照一定的顺序执行。每个 Job 执行一个具体的任务。比如运行单元测试、构建代码或部署应用等。
2 结构
关于
.gitlab-ci.yml
配置文件的编写将会在下一章重点讲解。
一个典型的 GitLab CI/CD Pipeline 由以下几个主要部分组成:
- 🔗 Pipeline(流水线)
Pipeline 是 GitLab CI/CD 中的顶级容器,包含了一系列 Stages 和 Jobs。当你提交代码时,GitLab 会根据.gitlab-ci.yml
配置文件来创建一个新的 Pipeline,并依次执行其中的所有 Job。
- 🧱 Stage(阶段)
一个 Stage 是 Pipeline 中的一个大步骤,它将多个相关的 Job 组织在一起。Stages 定义了一个 Pipeline 中任务的执行顺序。每个 Stage 可以包含一个或多个 Job。- Stages的执行顺序:GitLab 会按照
.gitlab-ci.yml
文件中定义的顺序依次执行每个 Stage,直到所有 Stage 都执行完毕。 - 并行执行:同一个 Stage 中的多个 Job 会并行执行(前提是没有依赖关系)。
- Stages的执行顺序:GitLab 会按照
- 🧩 Job(作业)
一个 Job 是 Pipeline 中最小的执行单元,代表了一个具体的任务。每个 Job 包含一组命令(如运行脚本、执行构建、进行测试等)。
Job 的特点:- 每个 Job 都有一个名称 (如 build、test、deploy)。
- 每个 Job 都有一个脚本(script),这组脚本会在指定的环境中执行。
- Jobs 可以在特定的条件下执行,例如某些分支、标签或文件变更。
- 💻 Runner
GitLab Runner 是执行 Job 的工具,GitLab Runner 是与 GitLab 实例连接的独立进程,负责根据.gitlab-ci.yml
文件的定义拉取代码并执行任务。
3 完整流程
解释:
- 提交代码 (Push):开发者推送代码到 GitLab 仓库,触发 CI/CD Pipeline。
- 创建 Pipeline:GitLab 根据
.gitlab-ci.yml
文件生成一个新的 Pipeline。 - 执行 Stages 和 Jobs:Pipeline 包含多个阶段(Stages),每个阶段包含一个或多个任务(Jobs),它们依次执行。(以下的阶段是一个示例,阶段可以自定义)
- Build 阶段:执行 Build Job,通常用来构建项目。
- Test 阶段:执行 Test Job,通常用来运行单元测试。
- Deploy 阶段:执行 Deploy Job,通常用来部署应用。
- Job 执行结果检查:GitLab 检查所有 Job 是否都执行成功。
成功
:如果所有 Job 都成功执行,Pipeline 会被标记为 成功。失败
:如果有任何一个 Job 失败,Pipeline 会被标记为 失败。
- 结束:Pipeline 执行结束,无论是成功还是失败。
4 触发条件
Pipeline 可以通过不同的条件来触发。
🔒 条件 | 解释 |
---|---|
Push | 当代码推送到仓库时,自动触发 Pipeline。 |
Merge Request | 当创建或更新 Merge Request 时,自动触发 Pipeline。 |
Tag | 当创建标签(Tag)时,触发特定的 Pipeline。 |
手动触发 | 通过 GitLab UI 或 API 手动触发 Pipeline。 |
定时触发 | 通过定时任务自动触发 Pipeline。 |
5 简单示例
假设你有一个 GitLab 项目,下面是一个典型的
.gitlab-ci.yml
文件,它定义了一个简单的 Pipeline,包含了两个阶段:build 和 test。
# 定义了 Pipeline 中的两个阶段:build 和 test
stages:
- build
- test
# 这个 Job 在 build 阶段运行
build_job:
stage: build
script:
- echo "Building the project..."
- make build
# 这个 Job 在 test 阶段运行
test_job:
stage: test
script:
- echo "Running tests..."
- make test
🔔 执行流程:
- 首先,build_job 在
build
阶段执行,完成代码构建。 - 然后,test_job 在
test
阶段执行,运行测试用例。 - 如果所有 Job 都成功执行,Pipeline 会被标记为成功。如果有任何一个 Job 失败,Pipeline 会被标记为失败。
6 复杂示例
下面是一个稍微复杂一些的
.gitlab-ci.yml
示例,它展示了如何使用多个阶段、Job 和一些条件控制。
stages:
- build
- test
- deploy
# Build stage
build:
stage: build
script:
- echo "Building the application"
- make build
# Test stage
test:
stage: test
script:
- echo "Running unit tests"
- make test
only:
- master
# Deploy stage, only runs on successful master builds
deploy:
stage: deploy
script:
- echo "Deploying the application"
- make deploy
when: on_success
only:
- master
🔔 执行流程:
- 首先,build 在 build 阶段执行,完成代码构建。
- 然后,test 在 test 阶段执行,打印并运行测试用例。
only: master
这个条件告诉 GitLab 仅当你提交到 master 分支时,才会执行这个 Job。这意味着 test Job 只有在 master 分支上提交代码时才会执行,而不会在其他分支 (如 develop 或 feature) 上执行。 - 最后,deploy 在 deploy阶段执行,打印并部署信息。
when: on_success
这告诉 GitLab Runner 只有当前面的 Job(如 test)成功完成后,deploy Job 才会执行。如果任何前面的 Job 失败,deploy Job 会被跳过。 - 如果所有 Job 都成功执行,Pipeline 会被标记为成功。如果有任何一个 Job 失败,Pipeline 会被标记为失败。
上一篇:《GitLab CI/CD学习教程 第二章Runner》
下一篇:《GitLab CI/CD学习教程 第四章gitlab-ci.yml》正在编写中…