Ich habe ein Docker-Image, nennen wir es frontend.image, das ich für einen Jenkins-Build-Slave verwende. Das Jenkins Docker-Plug- in dreht einen Container aus diesem Image und erstellt Artefakte im Container. Das alles funktioniert super. In diesem Fall frontend.imagewird die zum Erstellen einer AngularJs-App verwendet. Zum Erstellen dieser Angular-App gehört auch die Installation von npm-Paketen, die die App benötigt.
Dieser Prozess, npm install, scheint lange zu dauern, 3 Minuten, npm installiert anscheinend jedes Mal jedes Paket.
Also habe ich ein Volume für meinen Slave hinzugefügt, es ist ein vom Host gemountetes Volume. Das Docker-Plugin verwendet dieses Volume jedes Mal, wenn es den Frontend-Container ausführt:
Der Benutzer, der den Befehl ausführt, npm installist jenkins. npm speichert einen Cache, den Sie mit befehl npm config get cachewelche Ausgaben finden können/home/jenkins/.npm
Aus diesem Grund habe ich das Host-Volume /slaves/volumes/tsl.frontend:/home/jenkinsauf meinem Webcontainer-Slave gemountet.
Ich baue meine Angular-App mit einem Jenkins-Projekt, baue kein Problem, viele npm-Pakete sind installiert. Wenn ich in meinen Docker-Host ssh und cmd starte, ls /slaves/volumes/tsl.frontendsehe ich viele npm-Pakete. Dies bedeutet, dass mein Host-Volume-Mount für den Slave funktioniert hat.

Jetzt erstelle ich das Jenkins-Projekt erneut. Npm installiert jedes einzelne Paket erneut, obwohl der Docker-Slave-Build-Container den Volume-Host-Mount verwendet. Ich kann dies sogar bestätigen, indem ich mit cmd, docker exec -it <some_clever_random_container_id> bashcmd su jenkinsund cmd in den Slave-Container schlage, in npm cache lsdem viele zwischengespeicherte npm-Pakete aufgelistet sind.

Selbst mit meinem Host-Mount-Volume, chmod 777für das übrigens keine Berechtigungsprobleme bestehen, kann ich npm installden Cache nicht verwenden.
In meinem Jenkins-Build, der den Docker-Slave-Container hochfährt, wird der erste Cmd ausgeführt, npm cache lsund viele Pakete werden aufgelistet. Bedeutet dies nicht, dass mein Host-Volume wie erwartet funktioniert und der npm-Cache-Index die Integrität aufweist, auch wenn er nicht beschädigt ist?
Ich habe das reguläre npm installcmd ausprobiert , das, wenn ich es auf meinem localhost-Rechner ausführe, beim ersten Mal alle Pakete und beim nächsten Mal fast keine Pakete installiert. Und auch der npm-Cache "Hack" npm --cache-min 9999999 install, entnommen aus dieser SO-Antwort sowie cmdnpm --skip-installed --cache-min 9999999 install
Eine verwandte Frage wurde auf StackOverflow gestellt.
npm cache lsund ein RAW ls ~/.npm/* -alin das Build-Skript selbst vor jedem anderen Build-Schritt einfügen, um den Zustand des Containers beim Starten des Builds sicherzustellen.

