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

发布于:2025-03-20 ⋅ 阅读:(30) ⋅ 点赞:(0)

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


🚀从零开始,结合具体场景和示例,让你彻底掌握 GitLab CI/CD 的配置!

icon


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 Runner 是与 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

# 定义了 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 和一些条件控制。

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