Как кешировать глобальные модули NodeJS AWS CodeBuild - PullRequest
2 голосов
/ 31 мая 2019

Есть ли способ кэшировать глобальные модули NodeJS в AWS CodeBuild?

Я использую LernaJS для управления своим хранилищем, и каждый раз, когда начинается сборка, я устанавливаю его с помощью команды npm install -g lerna (это занимает 30 секунд).

Чтобы справиться с этим, сначала я выяснил, где npm установил Lerna с помощью команды npm list -g и вернул

/usr/local/lib 
├─┬ grunt@1.0.4 
│ ├── coffeescript@1.10.0 
...
├─┬ lerna@3.14.1 
│ ├─┬ @lerna/add@3.14.0 
│ │ ├── @lerna/bootstrap@3.14.0 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 
+ lerna@3.14.1 
added 650 packages from 321 contributors and updated 1 package in 40.628s 

Я что-то упустил? Есть ли способ сохранить Лерну как grunt, grunt-cl, npm и webpack (внутри /usr/local/lib/node_modules/) до начала строительства?

Спасибо!

1 Ответ

0 голосов
/ 14 июня 2019

Благодаря комментарию @JD D я создал образ докера, перенес его в AWS ECR и использую в качестве своего собственного изображения.

Мой Dockerfile:

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
...