Jenkins Docker构buildslave – npmcaching不起作用

我有一个Docker镜像,我们称之为frontend.image ,用于Jenkins构build的从机。 Jenkins Docker插件将从这个图像旋转一个容器,并在容器内部构build工件。 这一切都很好。 在这种情况下, frontend.image被用来构build一个AngularJs应用程序。 构build这个Angular应用程序的一部分是安装应用程序需要的npm包。

这个过程,npm install,似乎需要很长时间,看起来好像是3分钟,npm每次都会安装每个包。

所以我为我的奴隶添加了一个卷,它是一个主机装入的卷,Docker插件每次运行前端容器时都会使用这个卷:

在这里输入图像说明

执行命令npm install的用户是jenkins 。 npm保留一个caching,你可以用命令npm config get cachefind它,它输出/home/jenkins/.npm

这就是为什么我有主机卷/slaves/volumes/tsl.frontend:/home/jenkins安装到我的Web容器奴隶。

我使用Jenkins项目构build了Angular应用程序,没有任何问题,安装了许多npm软件包。 如果ssh进入我的Docker主机并运行cmd ls /slaves/volumes/tsl.frontend我会看到很多的npm包。 这意味着我的主机卷挂载的奴隶工作。 在这里输入图像说明

现在我再次构buildJenkins项目,npm再次安装每个包,即使Docker slave构build容器正在使用卷主机装载。 我甚至可以通过使用cmd docker exec -it <some_clever_random_container_id> bash到slave容器来确认,然后cmd su jenkins然后cmd npm cache ls其中列出了许多caching的npm包。 在这里输入图像说明

所以,即使我的主机安装卷,其中有权限chmod 777的方式,所以没有权限问题,我不能让npm install使用caching。

我尝试了常规的npm install cmd,当我在本地主机上运行时,第一次安装所有的软件包,下次几乎没有软件包。 还有npmcaching“hack” npm --cache-min 9999999 install ,取自这个SO回答以及cmd npm --skip-installed --cache-min 9999999 install