有向无环图

有向无环图 可以在 CI/CD 流水线的上下文中,用于在作业之间建立关系,以便以最快的方式执行,无论阶段如何设置。

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

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

考虑一个 monorepo 如下:

./service_a
./service_b
./service_c
./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 流水线一样,以分阶段的顺序一起运行。

用例

DAG 可以帮助解决 CI/CD 流水线内作业之间的几种不同类型的关系。当您处理多平台构建或复杂的依赖网络时,可能会发生这种情况,例如操作系统构建或可独立部署但相关的微服务的复杂部署图。

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

使用

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

请注意,needs 也可以与 parallel 关键字一起使用,为您的流水线中的并行化提供强大的选项。

限制

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

Needs 可视化

需求可视化可以更轻松地可视化 DAG 中依赖作业之间的关系。此图显示流水线中需要或其他作业需要的所有作业。 没有关系的作业不会显示在此视图中。

要查看需求可视化,请在查看使用 needs 关键字的流水线时单击 Needs 选项卡。

Needs visualization example

单击一个节点会突出显示它所依赖的所有作业路径。

Needs visualization with path highlight

您还可以在完整流水线图中查看 needs 关系。