Ускорьте сборку NPM в Дженкинсе - PullRequest
0 голосов
/ 31 мая 2018

Дженкинс работает в ECS.Мы используем конвейеры для нашего процесса сборки и развертывания.Конвейер использует подключаемый модуль Docker для извлечения образа, который имеет некоторые зависимости для тестирования и т. Д. Все наши шаги выполняются в этом контейнере Docker.

Проблема, с которой мы столкнулись в настоящее время, заключается в том, что наша установка NPM занимает около 8 минут.Мы хотели бы ускорить этот процесс.Поскольку контейнеры разрушаются в конце каждой сборки, генерируемые модули node_module удаляются.Я рассмотрел кеширование NPM, но из-за природы докера это казалось неуместным, если только мы предварительно не установим зависимости в образ докера (но это почти утроит размер изображения).Существуют ли простые решения для этого, которые помогут нашему NPM устанавливать скорости?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Вы можете настроить прокси Http и кэшировать все зависимости (*) (**).

Затем используйте - build-arg , чтобы установить HTTP_PROXY переменная :

docker build --build-arg HTTP_PROXY=http://<cache ip>:3128 .

*: это не поможет улучшить производительность зависимостей, которые необходимо скомпилировать (например, привязки c / c ++)

**: Iиспользуйте контейнер Squid для совместного использования конфигурации кеша

0 голосов
/ 07 июня 2018

Вы должны использовать кэширование пакетов, но не кэширование node_modules напрямую.Вместо этого вы монтируете каталоги кеша, которые ваш установщик пакетов использует , и ваша установка будет молниеносно .Docker делает это возможным, позволяя вам монтировать каталоги в контейнере, который сохраняется во всех сборках.

Для yarn mount ~/.cache или ~/.cache/yarn
Для npm mount ~/.npm

docker run -it -v ~/.npm:/.npm ~/.cache:/.cache /my-app:/my-app testing-image:1.0.0 bash -c 'npm ci && npm test`

Примечание: Я использую здесь npm ci, который будет всегда удалять node_modules и переустанавливаться с использованием точных версий в package-lock.json, так что вы получитеочень последовательные сборки.(В пряже это yarn install --frozen-lockfile)

...