缓存Jenkins管道上的NPM依赖项 [英] Cache NPM dependencies on Jenkins pipeline

查看:0
本文介绍了缓存Jenkins管道上的NPM依赖项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们都知道使用NPM下载依赖项可能非常耗时,尤其是当我们仅限于旧的NPM版本时。

对我来说,作为一名开发人员,这并不是什么大事,因为我必须在本地开发计算机上执行这一操作很少,并且所有操作都使用项目文件夹中的node_MODULES缓存。但现在我想将这些应用程序带到一个CI环境中,与Jenkins一起。

我意识到使用NPM下载依赖项花费了大量的时间。这是一个问题,因为:

  1. NPM下载项目文件夹中的依赖项,而不是Maven‘s/home/user/.m2之类的全局文件夹

  2. 我必须在每次运行时清理Jenkins工作区文件夹,以避免GIT签出出现问题。

我想要一个非常优雅的解决方案来缓存我的Jenkins Slave上的NPM依赖项,但到目前为止我只能想到:

  1. 从Jenkins工作区中删除NODE_MODULES文件夹以外的所有内容。我不喜欢这样,因为如果我继续为我的项目创建分支,我可能会消耗大量的硬盘。每个分支创建一个工作区。

  2. 在每次NPM安装后执行类似cp ./node_modules /home/npm_cache的操作,然后在代码签出后执行cp /home/npm_cache ./node_modules

我觉得这些解决方案太糟糕了。肯定有更好的方法来做到这一点。

推荐答案

我在我的Jenkins管道中为3个不同的项目所做的是,对每个项目使用tar而不是cp,然后使用npm install而不是npm ci

  1. cd到您的项目
  2. npm i
  3. tar cvfz ${HOME}/your_project_node_modules.tar.gz node_modules

然后在管道中:

dir(your_project){
  sh "tar xf ${HOME}/your_project_node_modules.tar.gz"
  sh "npm i"
}

当然,它的缺点是随着时间依赖关系的改变,安装时间会更长,但我已经设法将镜像中的磁盘空间使用量减少了约0.5 GB,tarcp快得多(cp~30秒,tar~5秒)

在我的例子中,总安装时间从大约3分钟缩短到了几秒钟。

这篇关于缓存Jenkins管道上的NPM依赖项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆