Есть ли способ кэшировать глобальные модули NodeJS в AWS CodeBuild?
Я использую LernaJS для управления своим репозиторием, и каждый раз, когда начинается сборка, я устанавливаю его с помощью команды npm install -g lerna
(это занимает 30 секунд).
Чтобы справиться с этим, я сначала понял, где npm install Lerna с помощью команды npm list -g
и был возвращен
/usr/local/lib
├─┬ [email protected]
│ ├── [email protected]
...
├─┬ [email protected]
│ ├─┬ @lerna/[email protected]
│ │ ├── @lerna/[email protected] deduped
...
Затем я попытался кэшировать папку /usr/local/lib/node_modules/**/*
и получил следующую ошибку:
[Container] 2019/05/30 20:09:00 Running command npm install -g lerna
/codebuild/output/tmp/script.sh: 4: /codebuild/output/tmp/script.sh: npm: not found
[Container] 2019/05/30 20:09:00 Command did not exit successfully npm install -g lerna exit status 127
[Container] 2019/05/30 20:09:00 Phase complete: INSTALL State: FAILED
[Container] 2019/05/30 20:09:00 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: npm install -g lerna. Reason: exit status 127
Поэтому я проверил содержимое /usr/local/lib/node_modules/
У меня были эти пакеты:
[Container] 2019/05/30 20:19:11 Running command ls /usr/local/lib/node_modules
grunt
grunt-cli
lerna
npm
webpack
Моей последней попыткой был кеш /usr/local/lib/node_modules/lerna/**/*
. Таким образом, ошибка не выдается, но и кеш не работает:
[Container] 2019/05/30 20:30:00 MkdirAll: /codebuild/local-cache/custom/656f09faf2819a785eae5e09f5d26a44ff4f20edf155297d6819c9600540cd26/usr/local/lib/node_modules/lerna
[Container] 2019/05/30 20:30:00 Symlinking: /usr/local/lib/node_modules/lerna => /codebuild/local-cache/custom/656f09faf2819a785eae5e09f5d26a44ff4f20edf155297d6819c9600540cd26/usr/local/lib/node_modules/lerna
...
[Container] 2019/05/30 20:30:01 Running command npm install -g lerna
/usr/local/bin/lerna -> /usr/local/lib/node_modules/lerna/cli.js
+ [email protected]
added 650 packages from 321 contributors and updated 1 package in 40.628s
Я что-то пропустил? Есть ли способ сохранить Лерну как grunt
, grunt-cl
, npm
и webpack
(внутри /usr/local/lib/node_modules/
) до начала строительства?
Спасибо!
Благодаря комментарию @JD D я создал образ докера, отправил его в AWS ECR и использую как свой собственный образ.
Мой докерфайл:
FROM node:lts
RUN npm install -g yarn lerna
RUN apt-get update && \
apt-get install -y groff less && \
apt-get clean
RUN curl https://s3.amazonaws.com/aws-cli/awscli-bundle.zip -o awscli-bundle.zip
RUN unzip awscli-bundle.zip && \
./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws && \
rm awscli-bundle.zip
Что вы имеете в виду под кешированием? какой образ докера вы используете для запуска своих сборок кода? если вы просто используете предоставленные AWS, не могли бы вы просто создать свой собственный образ докера с уже установленными зависимостями?