首页/开发/CI/CD 与发布速查/父子流水线(Child Pipeline)
流水线设计54 条

父子流水线(Child Pipeline)

父管道按条件触发子管道(独立配置文件、独立复杂度):单仓多项目或动态生成场景的常用组织方式。

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

父子流水线是什么

父子流水线(Parent-child pipelines)是 GitLab 的组织机制:父管道通过 trigger 关键字触发一个独立的子管道,子管道使用自己的一份配置。配置来源可以是同仓库文件(include: local)、由前置作业动态生成的文件(include: artifact)、另一仓库的配置(include: project)或官方模板(include: template)。子管道是一条独立的流水线,有自己的 ID、阶段与作业,在父管道页面下折叠展示。它解决两个问题:超大 .gitlab-ci.yml 的拆分,与按变更内容动态决定跑什么。

基本信息

适用平台GitLab CI/CD
触发语法trigger + include(local/artifact/project/template)
等待语义strategy: depend 时父作业等待子管道并镜像状态;默认不等待
制品边界父子管道之间不自动共享 artifacts,需显式传递或各自生成
可见性子管道在父管道页面下折叠展示,排障入口分散

典型使用场景

  • 单仓多项目(monorepo):每个子项目一份子管道配置,父管道按变更路径决定触发哪个。
  • 动态生成配置:前置作业用脚本按本次改动生成子管道 YAML,再由 trigger 拉起。
  • 团队自治:各团队维护自己目录下的流水线文件,独立评审、独立演进。
  • 拆分巨型配置:把超长 .gitlab-ci.yml 按领域拆成多份,降低单文件维护成本。
  • 跨仓复用:用 include: project 引用公共流水线仓库的配置模板,统一规范。

固定拆分与动态生成

固定拆分与动态生成
# 同仓库固定文件触发
web:
  trigger:
    include: web/.gitlab-ci.yml
    strategy: depend

# 动态生成子管道配置
generate:
  stage: build
  script: ./ci/gen-child.sh > child.yml
  artifacts:
    paths: [child.yml]
dynamic:
  trigger:
    include:
      artifact: child.yml
      job: generate
    strategy: depend

配置来源对比

方式写法适用
同仓库文件include: local固定拆分、多项目
动态生成include: artifact + job按变更生成
他仓配置include: project跨仓模板复用
官方模板include: template通用规范片段
父子管道之间不自动共享制品:父作业的产物子管道拿不到,需要显式传递或各跑各的,规划时先想清数据流。
子管道排障要先定位是父还是子:父管道页面折叠展示子管道链接,失败时从子管道页面看具体作业日志。

易错点

  • 期待父作业产物在子管道中直接可用:父子之间不传递 artifacts,需下载或重新生成,否则子管道作业缺文件失败。
  • 动态生成的 YAML 语法错误:父管道整体失败且提示不直观,生成后先跑 CI Lint 校验再提交。
  • 缺少 strategy: depend:父管道不等待子管道,子管道失败时父管道可能显示通过,门禁被绕过。
  • 保留与清理策略分散:子管道单独成链、排障入口在折叠列表里,台账写清父子对应关系与保留策略。
  • 嵌套层级过深:父子再套父子后状态汇总困难,超过两层考虑改为 include 组件化方案。

数据来源与参考

  • GitLab Docs《Parent-child pipelines》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌