使用 needs 让作业更早开始
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
您可以使用 needs 关键字在 pipeline 中创建作业之间的依赖关系。只要依赖关系满足,作业就会立即运行,而不管 pipeline 的 stages 配置如何。您甚至可以配置一个没有定义 stages 的 pipeline(实际上是一个大阶段),作业仍然会按正确的顺序运行。这种 pipeline 结构是一种有向无环图(directed acyclic graph)。
例如,您可能有一个特定的工具或独立的网站,它们是作为您主项目的一部分构建的。使用 needs,您可以指定这些作业之间的依赖关系,GitLab 会尽快执行这些作业,而不是等待每个阶段完成。
与其他 CI/CD 解决方案不同,GitLab 不要求您在分阶段执行和无阶段执行流程之间做出选择。您可以在单个 pipeline 中实现分阶段和无阶段的混合组合,只需使用 needs 关键字即可为任何作业启用此功能。
考虑一个如下的 monorepo:
./service_a
./service_b
./service_c
./service_d这个项目可以有一个组织为三个阶段的 pipeline:
| 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 完成后立即启动,这可能会快得多。
如果需要,c 和 d 作业可以按阶段顺序运行。
needs 关键字也可以与 parallel 关键字一起使用,为您提供 pipeline 中并行化的强大选项。
使用场景
您可以使用 needs 关键字在 CI/CD pipeline 中定义几种不同类型的作业依赖关系。您可以设置依赖关系以实现扇入或扇出,甚至可以重新合并(菱形依赖)。这些依赖关系可用于以下类型的 pipeline:
- 处理多平台构建。
- 具有复杂的依赖关系网络,如操作系统构建。
- 具有可独立部署但相关的微服务的部署图。
此外,needs 可以帮助提高 pipeline 的整体速度并提供快速反馈。通过创建不会不必要地相互阻塞的依赖关系,您的 pipeline 可以尽可能快地运行,无论 pipeline 阶段如何,确保输出(包括错误)能够尽快提供给开发者。