Ошибка: не удается найти модуль '/ app / __ sapper __ / build' в Cloud Build - PullRequest
0 голосов
/ 22 марта 2020

Я пытаюсь настроить автоматизированную сборку Cloud для более безопасного проекта, который развертывается в Cloud Run. Однако я получаю ошибку при развертывании. Это моя первая попытка работы с КИ, поэтому я уверен, что есть много вещей, которые я делаю неправильно.

cloudbuild.yaml

steps:
  - name: "gcr.io/cloud-builders/gcloud"
    args:
      - kms
      - decrypt
      - --ciphertext-file=.env.enc
      - --plaintext-file=.env
      - --location=global
      - --keyring=jointcreative
      - --key=cloudbuild-env

  - name: "gcr.io/cloud-builders/docker"
    args: ["build", "-t", "gcr.io/$PROJECT_ID/$PROJECT_ID", "."]

  - name: "gcr.io/cloud-builders/docker"
    args: ["push", "gcr.io/$PROJECT_ID/$PROJECT_ID"]

  - name: "gcr.io/cloud-builders/npm"
    args: ["ci", "--production"]

  - name: 'gcr.io/cloud-builders/gcloud'
    args:
    - 'run'
    - 'deploy'
    - 'jointcreative'
    - '--image'
    - 'gcr.io/$PROJECT_ID/$PROJECT_ID'
    - '--region'
    - 'us-central1'
    - '--platform'
    - 'managed'

  - name: "gcr.io/$PROJECT_ID/firebase"
    args: ['deploy']

Dockerfile

FROM mhart/alpine-node:12


WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --production

FROM mhart/alpine-node:slim-12

WORKDIR /app
COPY --from=0 /app .
COPY . .

ENV PORT 8080
ENV HOST 0.0.0.0

EXPOSE 8080
CMD ["node", "__sapper__/build"]

Журналы ошибок enter image description here

Ответы [ 2 ]

1 голос
/ 24 марта 2020

Похоже, что вы пропустили шаг (который можно поместить в ваш скрипт cloudbuild / ci или Dockerfile) для фактической сборки приложения.

Sapper использует Rollup или Webpack для объединения вашего приложения и помещает вывод в каталог __sapper__/build. Шаг COPY в вашем Dockerfile копирует этот вывод в ваш конечный контейнер.

Попробуйте добавить шаг, который запускает npm run build в ваш процесс, за некоторое время до создания образа Docker.

0 голосов
/ 28 апреля 2020

Причина, по которой вы получаете эту ошибку, заключается в том, что вы не создаете приложение Sapper с npm run build.

Я опубликовал репозиторий с Sapper, развернутым в Cloud Run несколько минут go на Github в https://github.com/mikenikles/sapper-on-cloud-run.

Используемое мной Dockerfile основано на 3 этапах, чтобы минимизировать конечный размер изображения.

# This stage builds the sapper application.
FROM mhart/alpine-node:12 AS build-app
WORKDIR /app
COPY . .
RUN npm install --no-audit --unsafe-perm
RUN npm run build

# This stage installs the runtime dependencies.
FROM mhart/alpine-node:12 AS build-runtime
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --production --unsafe-perm

# This stage only needs the compiled Sapper application
# and the runtime dependencies.
FROM mhart/alpine-node:slim-12
WORKDIR /app
COPY --from=build-app /app/__sapper__ ./__sapper__
COPY --from=build-app /app/static ./static
COPY --from=build-runtime /app/node_modules ./node_modules

EXPOSE 3000
CMD ["node", "__sapper__/build"]

Я также рекомендую следующее .dockerignore файл для копирования только того, что необходимо для запуска Sapper:

/*
!/package.json
!/package-lock.json
!/rollup.config.js
!/src
!/static

В вашем cloudbuild.yaml вы можете подумать о добавлении следующего в сценарий развертывания Cloud Run , если вы планируете выставить сервис публично :

  - 'managed'
  - '--allow-unauthenticated'
...