Directed Acyclic Graph

原文:https://docs.gitlab.com/ee/ci/directed_acyclic_graph/

Directed Acyclic Graph

版本历史

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

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

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

考虑如下的 monorepo:

  1. ./service_a
  2. ./service_b
  3. ./service_c
  4. ./service_d

它具有如下所示的管道:

build test deploy
build_a test_a deploy_a
build_b test_b deploy_b
build_c test_c deploy_c
build_d test_d deploy_d

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

Use cases

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

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

Usage

使用needs:关键字定义作业之间的关系.

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

Limitations

有向无环图是一个复杂的功能,从最初的 MVC 开始,您可能需要解决某些用例. 想要查询更多的信息:

DAG Visualization

版本历史

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

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

DAG visualization example

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

DAG visualization with path highlight

Enable or disable DAG Visualization

DAG 可视化正在开发中,但已作为 Beta 功能提供,因此用户可以检查其限制和用途.

它部署在默认情况下启用的功能标志的后面. 有权访问 GitLab Rails 控制台的 GitLab 管理员可以选择为您的实例禁用它:

  1. # Instance-wide
  2. Feature.disable(:dag_pipeline_tab)
  3. # or by project
  4. Feature.disable(:dag_pipeline_tab, Project.find(<project id>))