使用 needs 轻松启动作业

你可以使用 needs 关键字来创建流水线中作业之间的依赖关系。作业在满足其依赖关系时立即运行,而与流水线的 stages 配置无关。您甚至可以配置一个没有定义任何阶段的流水线(本质上是一个大型阶段),并且作业仍然按正确的顺序运行。这种流水线结构是一种 有向无环图

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

和其他的 CI/CD 解决方案不一样,极狐GitLab 不要求您在流水线中选择阶段式或非阶段式执行流。您可以通过仅使用 needs 关键字为任何作业启用该功能,实现阶段式和非阶段式混合的流水线。

考虑一个巨型仓库的结构如下:

./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

你可以通过使用 needs 来分别关联 a 类作业以及 bcd 类作业,从而提高作业执行效率。build_a 构建可能需要很长时间,但 test_b 无需等待,它可以配置为在 build_b 完成后立即启动,而 build_b 完成的速度可能要快得多。

如果想要,cd 作业可以在 stage 序列中运行。

needs 关键字还能够和 parallel 关键字一起工作,从而为流水线提供强大的并行化选项。

用例

你可以使用 needs关键字来为 CI/CD 流水线不同的作业间定义不同类型的依赖。你可以设置依赖项以实现扇入或扇出,甚至还能将它们重新合并(菱形依赖)。这些依赖项可用于以下类型的流水线:

  • 处理多个平台构建。
  • 具有复杂的依赖关系网络,如操作系统构建。
  • 具有独立可部署但相关的微服务的部署图。

此外,needs 还可以提高流水线的整体速度并提供快速反馈。通过创建不必要地相互阻塞的依赖项,您的流水线可以尽可能快地运行,从而确保输出(包括错误)尽可能快地对开发人员可用。