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》正在编写中...

相关推荐
月落星还在2 小时前
AI学习——卷积神经网络(CNN)入门
人工智能·学习·cnn
lx学习4 小时前
嵌入式c学习六
c语言·数据结构·学习
myzzb7 小时前
python字符级差异分析并生成 Word 报告 自然语言处理断句
python·学习·自然语言处理·word·snownlp
土豆土豆,我是洋芋9 小时前
《大语言模型》学习笔记(二)
笔记·学习·语言模型·datawhale
猪猪成9 小时前
【图论】FLOYD弗洛伊德算法-最短路径
学习·算法·图论
小程同学>o<9 小时前
嵌入式开发之STM32学习笔记day08
笔记·stm32·学习
虾球xz10 小时前
游戏引擎学习第170天
javascript·学习·游戏引擎
虾球xz10 小时前
游戏引擎学习第168天
前端·学习·游戏引擎
虾球xz10 小时前
游戏引擎学习第167天
学习·游戏引擎
电子艾号哲11 小时前
STC89C52单片机学习——第26节: [11-2]蜂鸣器播放音乐
单片机·嵌入式硬件·学习