有向无环图

有向无环图可以在 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 关系。