Directed Acyclic Graph

Directed Acyclic Graph

版本历史

  • 在 GitLab 12.2 中引入 .
  • 在 GitLab 12.10 中 .

可以在 CI / CD 管道的上下文中使用有向无环图,以建立作业之间的关系,从而以最快的方式执行,而不管如何设置阶段.

例如,您可能拥有特定的工具或单独的网站,这些网站是作为主项目的一部分而构建的. 使用 DAG,您可以指定这些作业之间的关系,然后 GitLab 将尽快执行作业,而不是等待每个阶段完成.

与其他针对 CI / CD 的 DAG 解决方案不同,GitLab 不需要您选择其中一个. 您可以在单个管道中实现 DAG 和传统的基于阶段的操作的混合组合. 配置非常简单,只需一个关键字即可为任何作业启用该功能.

考虑如下的 monorepo:

使用 DAG,您可以将作业与_b作业彼此关联,即使服务a构建时间很长,服务b也不会等待它,并且会尽快完成. 在这个非常相同的管道中, 和_d可以单独放置,并且可以像任何普通的 GitLab 管道一样以分段的顺序一起运行.

DAG 可以帮助解决 CI / CD 管道中作业之间的几种不同类型的关系. 最典型的情况是,当作业需要展开或展开和/或合并回去时(钻石相关性),这可以解决. 当您处理多平台构建或复杂的依赖关系网时,例如在操作系统构建或可独立部署但相关的微服务的复杂部署图中,可能会发生这种情况.

此外,DAG 可以帮助提高管道的总体速度,并有助于提供快速反馈. 通过创建不会相互阻塞的依赖关系,您的管道将尽可能快地运行,而不管管道的阶段如何,从而确保开发人员可以尽快获得输出(包括错误).

使用定义作业之间的关系.

请注意, needs:也可与parallel关键字一起使用,从而为管道内的提供了强大的选项.

版本历史

  • 它部署在功能标记后面,默认情况下处于禁用状态.
  • 默认情况下在 13.2 中 .
  • 在 GitLab.com 上启用了它.
  • 对于 GitLab 自我管理的实例,GitLab 管理员可以选择禁用它 .

通过 DAG 可视化,可以更轻松地可视化 DAG 中依赖作业之间的关系. 此图将显示管道中需要或其他作业需要的所有作业. 没有关系的作业不会显示在该视图中.

单击节点将突出显示其依赖的所有作业路径.

DAG visualization with path highlight

它部署在默认情况下启用的功能标志的后面. 可以选择为您的实例禁用它:

  1. # Instance-wide
  2. Feature.disable(:dag_pipeline_tab)
  3. # or by project