我已经在VSTS中配置了一个私有代理,并在那里全局安装了NPM。当我尝试通过构建任务安装NPM时,它仍在为每个构建安装NPM软件包,这需要花费大量时间-大约12分钟。
如何缓存NPM安装,以减少构建时间?
答案 0 :(得分:1)
我们使用npm-cache,npm-cache是一个节点模块,它将为每个哈希计算出package.json文件的哈希值,它将在构建服务器上使用node_modules的内容创建zip文件夹,现在为npm install简化为在每个版本上提取一个zip(当然,只有在您实际上没有更改package.json的情况下)。
这个想法是:第一次,该工具下载npm软件包并将其保存在本地;第二次,如果package.json
未被更改,他将从本地磁盘上获取软件包并将其复制到构建代理文件夹,只有package.json
更改后,他才从互联网上下载软件包。
在构建计算机上安装npm-cache:
npm install npm-cache -g
在构建定义中添加命令行任务(工具:C:\Windows\User\AppData\Roaming\npm\npm-cache
(如果将工具添加到环境路径变量,则为npm-cache
);参数:install npm
;工作文件夹:$(Build.SourcesDirectory)
(或package.json
所在的位置)。
答案 1 :(得分:0)
不幸的是,我们目前无法缓存NPM安装,因为目前尚无此类内置功能。
然而,已经有用户提出了建议该功能的声音:Improve hosted build agent performance with build caches,而且VSTS团队现在正在积极地进行这项工作...
答案 2 :(得分:0)
MS终于实现了此功能(当前处于测试版)https://docs.microsoft.com/en-us/azure/devops/pipelines/caching/index?view=azure-devops#npm
从那里:
variables:
npm_config_cache: $(Pipeline.Workspace)/.npm
steps:
- task: CacheBeta@0
inputs:
key: $(Build.SourcesDirectory)/package-lock.json
path: $(npm_config_cache)
displayName: Cache npm
- script: npm ci