GitLab CI/CD学习教程(第三章Pipeline)
🚀从零开始,结合具体场景和示例,让你彻底掌握 GitLab CI/CD 的配置!
目录
-
- [1 定义](#1 定义)
- [2 结构](#2 结构)
- [3 完整流程](#3 完整流程)
- [4 触发条件](#4 触发条件)
- [5 简单示例](#5 简单示例)
- [6 复杂示例](#6 复杂示例)
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 Runne r 是与 GitLab 实例连接的独立进程,负责根据.gitlab-ci.yml
文件的定义拉取代码并执行任务。
3 完整流程
是 否 Deploy 阶段 执行 Deploy Job Test 阶段 执行 Test Job Build 阶段 执行 Build Job 提交代码Push 创建 Pipeline 执行 Stages 和 Jobs 所有 Job 执行成功? 标记为 Success 标记为 Failed 结束
解释:
- 提交代码 (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。
yml
# 定义了 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 和一些条件控制。
yml
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》正在编写中...