У мене є образ Докера, назвемо його frontend.image, який я використовую для рабовласницького складу Дженкінса. Плагін Дженкінса Докера створить контейнер із цього зображення та створить артефакти всередині контейнера. Це все чудово працює. У цьому випадку програма frontend.imageвикористовується для створення програми AngularJs. Частина побудови цього кутового додатка полягає у встановленні npm-пакетів, необхідних додатку.
Цей процес, встановлення npm, здається, займає тривалий час, 3 хвилини, здається, npm завжди встановлює кожен пакет кожен раз.
Тож я додав об'єм для мого раба, це хост, встановлений на хості, плагін Docker буде використовувати цей том щоразу, коли він запускає контейнер frontend:
Користувач, який виконує команду, npm install- це jenkins. npm зберігає кеш, який ви можете знайти за допомогою команди, npm config get cacheяка виводить/home/jenkins/.npm
Ось чому у мене об'єм хоста /slaves/volumes/tsl.frontend:/home/jenkinsвстановлений на моєму веб-контейнері.
Я будую свою програму Angular за допомогою проекту Jenkins, не створює жодних проблем, встановлено багато пакетів npm. Якщо ssh у мій хостинг Docker і запустіть cmd, ls /slaves/volumes/tsl.frontendя бачу багато пакетів npm. Це означає, що мій хост-кріплення для холопа працював.

Тепер я будую проект Jenkins знову, npm встановлює кожен пакет знову, навіть незважаючи на те, що контейнер для складання Slave для Docker використовує кріплення хосту томів. Я навіть можу підтвердити, потрапивши в контейнер для підлеглих з cmd, docker exec -it <some_clever_random_container_id> bashа потім cmd, su jenkinsа потім cmd, у npm cache lsякому перераховано багато пакетів npm, які кешуються.

Тож, навіть якщо мій об'єм кріплення хоста, який chmod 777, до речі , має дозволи , тому немає дозволів, я не можу отримати npm installкеш.
У моїй конструкції Jenkins, яка закручує контейнер Slave Slave, перший cmd, який я запускаю, npm cache lsі перераховано багато пакунків, чи це не означає, що мій об'єм хоста працює так, як очікувалося, а індекс кеш-пам'яті npm має цілісність, а не пошкоджений?
Я спробував звичайний npm installcmd, який під час запуску на моїй локальній машині встановлює всі пакунки вперше і майже не пакує наступного разу. А також кеш-пам'ять npm "хак" npm --cache-min 9999999 install, взята з цієї відповіді ТА так само cmdnpm --skip-installed --cache-min 9999999 install
Пов’язане запитання було розміщено на StackOverflow.
npm cache lsі raw ls ~/.npm/* -alу сам сценарій збірки перед будь-яким іншим кроком збірки лише для того, щоб забезпечити стан контейнера при запуску збірки.

