Error: Cannot find module '/app/__sapper__/build' on Cloud Build
Error: Cannot find module '/app/__sapper__/build' on Cloud Build
我正在尝试为部署到云 运行 的 sapper 项目设置自动化云构建。但是我在部署时遇到错误。
这是我第一次尝试 CI 工作流程,所以我确定有很多地方我做错了。
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"]
错误日志
您似乎缺少实际构建应用程序的步骤(可以将其放入 cloudbuild/ci 脚本或 Docker 文件中)。
Sapper 使用 Rollup 或 Webpack 来捆绑您的应用程序并将输出放在 __sapper__/build
目录中。 Docker 文件中的 COPY
步骤将此输出复制到最终容器中。
尝试在构建 Docker 图像之前的某个时间将运行 npm run build
的步骤添加到您的进程中。
您收到此错误的原因是您没有使用 npm run build
.
构建 Sapper 应用程序
几分钟前,我在 Github https://github.com/mikenikles/sapper-on-cloud-run 上发布了一个存储库,其中 Sapper 已部署到云 运行。
我使用的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
中,您可能需要考虑将以下内容添加到云 运行 部署脚本 如果您计划公开服务 :
- 'managed'
- '--allow-unauthenticated'
我正在尝试为部署到云 运行 的 sapper 项目设置自动化云构建。但是我在部署时遇到错误。 这是我第一次尝试 CI 工作流程,所以我确定有很多地方我做错了。
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"]
错误日志
您似乎缺少实际构建应用程序的步骤(可以将其放入 cloudbuild/ci 脚本或 Docker 文件中)。
Sapper 使用 Rollup 或 Webpack 来捆绑您的应用程序并将输出放在 __sapper__/build
目录中。 Docker 文件中的 COPY
步骤将此输出复制到最终容器中。
尝试在构建 Docker 图像之前的某个时间将运行 npm run build
的步骤添加到您的进程中。
您收到此错误的原因是您没有使用 npm run build
.
几分钟前,我在 Github https://github.com/mikenikles/sapper-on-cloud-run 上发布了一个存储库,其中 Sapper 已部署到云 运行。
我使用的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
中,您可能需要考虑将以下内容添加到云 运行 部署脚本 如果您计划公开服务 :
- 'managed'
- '--allow-unauthenticated'