首页 > 解决方案 > Gitlab CI 和大型 npm 依赖项

问题描述

在 Gitlab CI 中处理大型 npm 依赖项时,有没有办法改进工作流程?node_modules我有一个项目,其中 puppeteer 是一个 npm 依赖项,并且由于 puppeteer 本质上是 chrome,它非常大(占整个目录的三分之二)。

有没有办法将 puppeteer 预先安装到管道中?这样就不需要每次从缓存服务器上传和下载整个依赖项了吗?另外,如果不需要每次都安装npm install.

标签: gitlabgitlab-cigitlab-ci-runner

解决方案


检查缓存节点依赖项是否有帮助:

如果您的项目使用 npm 安装 Node.js 依赖项,以下示例将全局定义缓存,以便所有作业都继承它。

默认情况下,npm 将缓存数据存储在主文件夹 ( ~/.npm) 中。
但是,您不能缓存项目目录之外的内容。
相反,告诉 npm 使用./.npm,并为每个分支缓存它:

#
# https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates/Nodejs.gitlab-ci.yml
#
image: node:latest

# Cache modules in between jobs
cache:
  key: $CI_COMMIT_REF_SLUG
  paths:
    - .npm/

before_script:
  - npm ci --cache .npm --prefer-offline

test_async:
  script:
    - node ./specs/start.js ./specs/async.spec.js

如果您需要为每个管道执行提供相同的缓存(不仅仅是在一个管道内的作业之间共享),您可能需要将该 .npm 保存为人工制品,您可以在下一次管道执行时将其恢复为本地.npm/缓存。
参见Anton Yakutovich的“ GitLab CI: Cache and Artifacts Explained by example


推荐阅读