2
如何在docker中运行的Jenkins构建从站中启用npm缓存?
我有一个Docker镜像,我们称它为frontend.imageJenkins构建奴隶。Jenkins Docker插件将从该映像启动一个容器,并在该容器内构建工件。这一切都很好。在这种情况下,frontend.image可使用来构建AngularJs应用。构建此Angular应用程序的一部分是安装应用程序所需的npm软件包。 npm安装这个过程似乎要花费很长时间,似乎3分钟,npm总是每次都安装每个软件包。 因此,我为从属服务器添加了一个卷,它是主机安装的卷,Docker插件每次运行前端容器时都会使用该卷: 执行命令的用户npm install是jenkins。npm保留了一个缓存,您可以使用npm config get cache输出命令来查找/home/jenkins/.npm 这就是为什么将主机卷/slaves/volumes/tsl.frontend:/home/jenkins安装到Web容器从属服务器的原因。 我使用Jenkins项目构建了Angular应用程序,构建没有问题,安装了许多npm软件包。如果ssh进入我的Docker主机并运行cmd,ls /slaves/volumes/tsl.frontend我会看到很多npm软件包。这意味着我的从服务器主机卷安装成功。 现在,我再次构建Jenkins项目,即使Docker从属构建容器正在使用卷主机安装,npm也会再次安装每个软件包。我什至可以通过先用cmd docker exec -it <some_clever_random_container_id> bash然后按cmd su jenkins然后按cmd 猛击到从属容器中来进行确认,npm cache ls其中列出了许多已缓存的npm软件包。 因此,即使我的主机安装卷具有权限chmod 777(因此没有权限问题),我也无法npm install使用缓存。 在运行Docker从属容器的Jenkins构建中,我运行的第一个cmd npm cache ls已经列出,并且列出了许多软件包,这是否意味着我的主机卷正在按预期工作并且npm缓存索引的完整性也未损坏? 我尝试了常规的npm installcmd,当我在localhost计算机上运行时,它会第一次安装所有软件包,而下次则几乎没有软件包。以及npm --cache-min 9999999 install从此SO答案以及cmd中获取的npm缓存“ hack”npm --skip-installed --cache-min 9999999 install 一个相关的问题发布在StackOverflow上。