使用 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
类作业以及 b
、c
和 d
类作业,从而提高作业执行效率。build_a
构建可能需要很长时间,但 test_b
无需等待,它可以配置为在 build_b
完成后立即启动,而 build_b
完成的速度可能要快得多。
如果想要,c
和 d
作业可以在 stage 序列中运行。
needs
关键字还能够和 parallel
关键字一起工作,从而为流水线提供强大的并行化选项。
用例
你可以使用 needs
关键字来为 CI/CD 流水线不同的作业间定义不同类型的依赖。你可以设置依赖项以实现扇入或扇出,甚至还能将它们重新合并(菱形依赖)。这些依赖项可用于以下类型的流水线:
- 处理多个平台构建。
- 具有复杂的依赖关系网络,如操作系统构建。
- 具有独立可部署但相关的微服务的部署图。
此外,needs
还可以提高流水线的整体速度并提供快速反馈。通过创建不必要地相互阻塞的依赖项,您的流水线可以尽可能快地运行,从而确保输出(包括错误)尽可能快地对开发人员可用。