为什么要在单个 GitLab 运行器上使用单独的作业和阶段?

时间:2021-05-14 21:31:12

标签: gitlab continuous-integration gitlab-ci gitlab-ci-runner

我有一个 GitLab 管道配置和一个 GitLab 运行程序。目前有 3 个阶段在进行中:

  1. install_dependencies
  2. 棉绒
  3. 测试

没有部署阶段。

安装依赖项和测试阶段都包含 1 个作业。但是,lint 阶段有 5 个 linter:ESLint、Prettier、tsc(用于类型检查的 TypeScript 编译器)、cspell(用于拼写检查)和用于代码重复检查的 jscpd。问题在于,每个作业虽然并行运行,但在配置 Docker 容器、获取 git 存储库、下载和上传缓存以及从缓存安装 Node 包方面都有开销。

安装依赖项的阶段仅通过使用缓存的 npm ci 目录运行 .npm

测试阶段的测试作业运行 Jest。

所有任务都花费很少的时间,甚至可以在不到 2 分钟的时间内运行,甚至可以按顺序运行。

我很好奇这样的管道设置是否有任何好处,除了 GitLab UI 提供的管道进度的简单概述?如果在我的案例中工作和阶段之间没有依赖关系,并且所有事情都可能在一个阶段中归为一个工作,那么为什么我需要多个阶段和工作?

1 个答案:

答案 0 :(得分:1)

一个词:并行性。尤其是在作业之间没有依赖关系的情况下,如果其中多个作业可以并行运行,则整个管道的完成速度会快得多。

至少是这个想法。 Node.js 及其数百万个小型 .js 文件对 Gitlab 性能来说真的很困难,因此在这种情况下,您可以有效地跳过这方面。

您可以尝试使用单独的 package.json 文件和缓存,仅为这些作业安装特定的 linter 包。

相关问题