GitLab CI 核心概念与后台任务测试场景

1.1 Pipeline、Job 与 Stage 的定义与关系

GitLab CI 的自动化流水线由三个基本层级构成:Pipeline、Stage 和 Job。理解这三者的层次关系是配置一切 CI 流程的基础。

  • Pipeline(流水线):一次完整 CI/CD 流程的实例。当代码推送、合并请求创建或定时触发时,GitLab 会创建一个新的 Pipeline。Pipeline 包含若干 Stage,且每个 Pipeline 都有唯一的 ID 和状态(pending/running/passed/failed)。
  • Stage(阶段):Pipeline 内的逻辑分组,同一 Stage 内的 Job 默认并行执行(除非使用 needs 或 parallel 调整)。常见的 Stage 包括 build、test、deploy。
  • Job(任务):执行实际操作的单元,例如编译、运行测试、部署。每个 Job 运行在独立的 Runner 环境中。

核心原则:Pipeline 是容器,Stage 是阶段分组,Job 是执行单元。后台任务通常作为特定 Stage 内的 Job 出现,但其行为可能需要特殊处理(如长时间运行、异步回调、延迟检测)。

1.2 后台任务在 CI 中的典型场景

后台任务指那些不立即返回结果、需要持续监听、异步调用或延迟检测的 Job。常见场景包括:

场景描述典型配置要点
长时间集成测试性能测试、压力测试或端到端测试,运行时长超过 30 分钟使用 timeout 调整 Job 超时,配合 artifacts:expire_in 保存日志
异步任务轮询触发外部系统后定期检查任务状态(如云部署、数据迁移)使用 rules 与 allow_failure 处理间歇性失败,结合 API 轮询脚本
定时后台批处理每日构建、报告生成等不需要立即反馈的任务通过 schedule 或 rules:if 按日期触发
守护进程健康检查启动一个后台服务后持续检查其 HTTP 端口或日志输出Job 内使用 background: true 启动服务,主 Job 通过 API 或文件系统检测

1.3 最小 Pipeline 示例(YAML 配置)

以下配置展示了一个包含三个 Stage 的 Pipeline,其中 long_test 作为后台任务,使用 timeout 和 retry 处理超时与重试。

stages:
  - build
  - test
  - deploy

build_job:
  stage: build
  script:
    - echo "Building application..."
    - make build

long_integration_test:
  stage: test
  script:
    - echo "Starting background integration test..."
    - timeout 600s ./run_long_test.sh
  timeout: 15m
  retry: 2
  artifacts:
    paths:
      - test_logs/
    expire_in: 7 days

deploy_job:
  stage: deploy
  script:
    - echo "Deploying..."
  only:
    - main

1.4 Pipeline 层次结构图

下方 SVG 图展示了 Pipeline → Stage → Job 的树形关系,并高亮了后台任务 Job 与普通 Job 的区分。

Pipeline 层次结构与后台任务位置 Pipeline Stage: build Stage: test Stage: deploy build_job unit_test long_test (后台任务) deploy_job 图释 • Pipeline 包含多个 Stage,Stage 间默认串行执行(顺序由 stanges 列表决定)。 • 每个 Stage 内可包含多个并行 Job。 • 后台任务(绿色粗框)通常属于 test Stage,但需要特殊超时、重试和产物策略。

💡 概念落地提示:在后续章节中,我们会围绕这一分层结构讲解如何为后台任务定制 Runner 标签、设置变量作用域、以及利用 needs 与 dependencies 控制 Job 间依赖,从而让长期运行的测试不阻塞其他流程。

1.5 常见概念混淆与避坑

  • Stage 不能动态创建:所有 Stage 必须在 stages 中事先声明。后台任务不能临时插入 Stage,只能通过 rules 控制是否执行。
  • Job 超时与 Pipeline 超时:Job 级别 timeout 覆盖 Pipeline 级别的默认超时。后台任务若需要长时间运行,要同时设置两层超时,避免 Pipeline 被强制终止。
  • Runner 资源竞争:后台任务可能耗尽 Runner 的并发槽位,导致其他 Job 排队。建议为后台任务使用单独的 Runner tag 或设置 resource_group 限制并发。

⚠️ 注意:默认 Pipeline 超时为 60 分钟。如果你的后台任务预期运行超过 1 小时,必须在 Project Settings → CI/CD → General pipelines → Timeout 中修改全局超时,或在 Job 内显式声明更大的 timeout。