GitLab CI/CD学习教程(第三章Pipeline)

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(流水线)
    PipelineGitLab CI/CD 中的顶级容器,包含了一系列 StagesJobs 。当你提交代码时,GitLab 会根据 .gitlab-ci.yml 配置文件来创建一个新的 Pipeline ,并依次执行其中的所有 Job

  • 🧱 Stage(阶段)
    一个 StagePipeline 中的一个大步骤,它将多个相关的 Job 组织在一起。Stages 定义了一个 Pipeline 中任务的执行顺序。每个 Stage 可以包含一个或多个 Job

    • Stages的执行顺序 :GitLab 会按照 .gitlab-ci.yml 文件中定义的顺序依次执行每个 Stage ,直到所有 Stage 都执行完毕。
    • 并行执行 :同一个 Stage 中的多个 Job 会并行执行(前提是没有依赖关系)。
  • 🧩 Job(作业)
    一个 JobPipeline 中最小的执行单元,代表了一个具体的任务。每个 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
  • 创建 PipelineGitLab 根据 .gitlab-ci.yml 文件生成一个新的 Pipeline
  • 执行 StagesJobsPipeline 包含多个阶段(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 UIAPI 手动触发 Pipeline
定时触发 通过定时任务自动触发 Pipeline

5 简单示例

假设你有一个 GitLab 项目,下面是一个典型的 .gitlab-ci.yml 文件,它定义了一个简单的 Pipeline ,包含了两个阶段:buildtest

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

🔔 执行流程:

  1. 首先,build_jobbuild 阶段执行,完成代码构建。
  2. 然后,test_jobtest 阶段执行,运行测试用例。
  3. 如果所有 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

🔔 执行流程:

  1. 首先,buildbuild 阶段执行,完成代码构建。
  2. 然后,testtest 阶段执行,打印并运行测试用例。only: master这个条件告诉 GitLab 仅当你提交到 master 分支时,才会执行这个 Job 。这意味着 test Job 只有在 master 分支上提交代码时才会执行,而不会在其他分支 (如 developfeature 上执行。
  3. 最后,deploydeploy 阶段执行,打印并部署信息。when: on_success这告诉 GitLab Runner 只有当前面的 Job (如 test )成功完成后,deploy Job 才会执行。如果任何前面的 Job 失败,deploy Job 会被跳过。
  4. 如果所有 Job 都成功执行,Pipeline 会被标记为成功。如果有任何一个 Job 失败,Pipeline 会被标记为失败。

上一篇:《GitLab CI/CD学习教程 第二章Runner》

下一篇:《GitLab CI/CD学习教程 第四章gitlab-ci.yml》正在编写中...

相关推荐
西岸行者9 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意9 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码9 天前
嵌入式学习路线
学习
毛小茛9 天前
计算机系统概论——校验码
学习
babe小鑫9 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms9 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下9 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。9 天前
2026.2.25监控学习
学习
im_AMBER9 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J9 天前
从“Hello World“ 开始 C++
c语言·c++·学习