gitlab - Gitlab CI 和大型 npm 依赖项
问题描述
在 Gitlab CI 中处理大型 npm 依赖项时,有没有办法改进工作流程?node_modules
我有一个项目,其中 puppeteer 是一个 npm 依赖项,并且由于 puppeteer 本质上是 chrome,它非常大(占整个目录的三分之二)。
有没有办法将 puppeteer 预先安装到管道中?这样就不需要每次从缓存服务器上传和下载整个依赖项了吗?另外,如果不需要每次都安装npm install
.
解决方案
检查缓存节点依赖项是否有帮助:
如果您的项目使用 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 ”
推荐阅读
- node.js - Telegram ShopBot - 如何单独存储客户数据(Telegraf,NodeJs)
- apache-spark - livy retreives 从哪里触发工作日志?
- python - 我想根据条件忽略关键字的失败并继续下一个关键字到已经存在的大量测试用例和套装
- excel - 如何按名称选择自定义布局与语言无关
- android - 电话身份验证 Firebase Flutter
- python - 为什么我不能使用某些特定参数来求解这些方程?(同情)
- r - 将具有相同索引 (ID) 的其他行的值分配给具有缺失值的行
- c++ - 当 std::shared_ptr 不匹配 'operator='
- javascript - 像模型一样打开一个对话框,但附加到元素上
- azure-active-directory - Azure Functions 身份验证 - 在单个端点上禁用?