AFP*_*555 7 dependencies caching node.js jenkins
我们都知道,使用npm下载依赖项会非常耗时,尤其是当我们仅限于旧的npm版本时。
对我而言,作为开发人员,这没什么大不了的,因为我不得不在本地开发计算机上执行几次此操作,并且一切都与我项目文件夹中的node_modules缓存一起使用。但是现在我想通过Jenkins将这些应用程序带到CI环境。
我意识到用npm下载依赖项花费了大量时间。这是一个问题,因为:
npm将依赖项下载到项目文件夹中,而不是Maven的/home/user/.m2之类的全局文件夹中
我必须在每次运行中清理Jenkins工作区文件夹,以避免git checkout出现问题。
我想要一个非常优雅的解决方案来在我的Jenkins从属服务器上缓存npm依赖项,但是到目前为止,我只能想到:
从Jenkins工作区中删除除node_modules文件夹之外的所有内容。我不喜欢这样,因为如果我继续为我的项目创建分支,我可能会消耗大量的HDD。每个分支都创建一个工作区。
cp ./node_modules /home/npm_cache在每次npm安装之后,然后cp /home/npm_cache ./node_modules在代码签出之后执行类似的操作。
我觉得这些解决方案很糟糕。必须有更好的方法来做到这一点。
我在 Jenkins 管道中为 3 个不同的项目所做的事情是,对于每个项目,使用tar代替,cp然后npm install代替npm ci, :
cd到你的项目npm itar 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"
}
Run Code Online (Sandbox Code Playgroud)
当然,它的缺点是随着时间依赖性的变化,安装将花费更长的时间,但我已经设法将映像中的磁盘空间使用量减少了大约 0.5GB,并且速度tar更快cp(cp〜30 秒,tar〜5 秒)
在我的例子中,总安装时间从大约 3 分钟缩短到几秒钟。
我对 Node.js 的了解不够,不知道如何在那边处理这个问题。但在 Linux 机器上处理这个问题的一种简单方法是在从 git 签出后立即将缓存目录符号链接到外部位置。每台代理计算机都将维护自己的缓存,但无论采用哪种解决方案,您可能都必须这样做。
我假设你已经研究过nodeJS插件,它不能做你想做的事。
| 归档时间: |
|
| 查看次数: |
3862 次 |
| 最近记录: |