Я пытаюсь создать приложение next.js в Google Cloud Build в монорепозитории с использованием рабочих пространств Yarn. Я обнаружил, что одним из самых медленных моментов в процессе сборки является установка узловых модулей, поскольку мы должны делать это в нескольких разных папках. В идеале я бы хотел использовать Docker для обработки кеширования node_modules
, если ничего не изменилось. Мой Dockerfile выглядит следующим образом:
FROM node:10.13
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install -g yarn
RUN yarn
COPY . .
Мой cloudbuild.yaml находится ниже:
steps:
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/dashboard-modules', './packages/dashboard' ]
- name: node:10.15.1
entrypoint: yarn
# `yarn build-dev` relies on the installation of `next` that happens in the previous step
args: ['--cwd', 'packages/dashboard', 'build-dev']
...
Я ожидаю, что при первой сборке COPY package*.json
будет просматривать содержимое package.json и, если ничего не изменилось, сохранит тот же результат для node_modules
. Одним из очень важных шагов здесь является установка next
, которая используется позже в процессе сборки для сборки самого приложения из package.json
:
"scripts": {
"build": "next build",
...
}
Однако, когда я перехожу ко второму шагу в cloudbuild.yaml
, мои ошибки сборки с env: 'next': No such file or directory
.
Похоже, мне нужно как-то «всплыть» (из-за отсутствия лучшего термина), что бы ни происходило на первом шаге cloudbuild.yaml
, и сделать команду next
доступной для второго шага. Но у меня вопрос: как я могу это сделать?
Следует отметить, что я новичок в Docker и пытаюсь понять, как он работает.