首页/开发/CI/CD 与发布速查/GitLab CI 子流水线(Child Pipelines)
工具链要点63 条

GitLab CI 子流水线(Child Pipelines)

父流水线触发子流水线:适合按目录拆分的大型仓库与动态生成的流水线配置;用 strategy: depend 让父级等待子级结果。

CI/CD 与发布速查开发更新于 2026-10-13

子流水线是什么

父流水线触发子流水线:适合按目录拆分的大型仓库与需要在运行时动态生成作业清单的场景。子流水线有独立的阶段与作业队列,父级可用 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 时父流水线触发后立即继续:需要等待子级结果的编排必须显式声明,否则父级成功不代表子级通过。
跨项目触发时变量不会自动带过去:需要在触发处显式传参,并在下游项目里补默认值,避免取空值导致行为异常。
子流水线的报错位于子级页面:排查入口要对准子级,只看父级日志容易误判为触发故障。

易错点

  • 子流水线配置写错:父级触发失败但错误信息在子级,排查入口要对准
  • 动态生成的 YAML 未在生成阶段校验:错误配置直到运行时才暴露
  • 自定义变量没在 trigger 中显式传递:子流水线取不到值,行为与预期不符
  • 把子流水线当并行手段滥用:每条子流水线有独立调度开销,过细拆分反而更慢

数据来源与参考

  • GitLab Docs《Downstream pipelines》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌