У мене є образ Докера, назвемо його 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 install
cmd, який під час запуску на моїй локальній машині встановлює всі пакунки вперше і майже не пакує наступного разу. А також кеш-пам'ять npm "хак" npm --cache-min 9999999 install
, взята з цієї відповіді ТА так само cmdnpm --skip-installed --cache-min 9999999 install
Пов’язане запитання було розміщено на StackOverflow.
npm cache ls
і raw ls ~/.npm/* -al
у сам сценарій збірки перед будь-яким іншим кроком збірки лише для того, щоб забезпечити стан контейнера при запуску збірки.