子流水线是什么
父流水线触发子流水线:适合按目录拆分的大型仓库与需要在运行时动态生成作业清单的场景。子流水线有独立的阶段与作业队列,父级可用 strategy: depend 等待并按子级结果决定成败;拆分后每条子流水线拥有独立的超时、重试与运行标签,失败影响也更局部。动态子流水线先由生成作业产出 YAML 文件,再作为 artifact 被 trigger 引用。
基本信息
| 基本写法 | trigger: include 指向子配置文件路径 |
|---|---|
| 动态生成 | include: artifact + job 指向生成作业的产物 |
| 等待策略 | strategy: depend 父级镜像子级状态 |
| 变量传递 | 自定义变量需在 trigger 中显式传递 |
| 静态与动态 | 静态 include 固定文件;动态先产出 YAML 再引用 |
| 嵌套层级 | 子级可继续触发孙级,层数存在限制 |
典型使用场景
- monorepo 按模块拆分:每个模块独立子流水线,只跑受影响的模块
- 动态生成配置:根据仓库内容在运行时生成作业清单,适合规则频繁变化的仓库
- 多项目编排:父流水线统一调度多个项目的子流水线
- 迁移过渡:从单文件逐步拆到多文件,先挂一条子流水线验证链路
- 大配置分治:把超长单文件拆小,便于维护与评审
静态与动态触发
静态与动态触发
# 静态:包含固定子配置
staging:
stage: deploy
trigger:
include: .gitlab-ci-staging.yml
strategy: depend # 父级等待子级并沿用其结果
# 动态:先产出 YAML,再触发
generate:
stage: build
script: ./gen-pipeline.sh > generated.yml
artifacts:
paths: [generated.yml]
trigger-child:
stage: deploy
trigger:
include:
- artifact: generated.yml
job: generate
strategy: depend父与子分工
| 环节 | 父流水线 | 子流水线 |
|---|---|---|
| 触发 | 声明 trigger 并传递变量 | 按自身规则正常生成 |
| 执行 | 可并行做其他阶段 | 独立队列执行作业 |
| 结果 | 设 depend 时镜像子级状态 | 失败信息在子级页面 |
| 排查 | 先看触发是否成功 | 再看子级作业日志 |
不设 strategy: depend 时父流水线触发后立即继续:需要等待子级结果的编排必须显式声明,否则父级成功不代表子级通过。
跨项目触发时变量不会自动带过去:需要在触发处显式传参,并在下游项目里补默认值,避免取空值导致行为异常。
子流水线的报错位于子级页面:排查入口要对准子级,只看父级日志容易误判为触发故障。