首页 > 解决方案 > 运行“gcloud builds submit ./project-folder”时是否需要将 node_modules 添加到 .gcloudignore?

问题描述

这是我的项目结构:

project/
  node_modules/
  src/
  .gcloudignore
  cloudbuild.yaml
  Dockerfile
  package.json

这是我构建它的方式:

gcloud builds submit ./project --config=./project/cloudbuild.yaml --project=$PROJECT_ID   // AND SOME SUBSTITUTIONS

这是我的cloudbuild.yaml文件:

steps:
  # BUILD IMAGE
  - name: "gcr.io/cloud-builders/docker"
    args:
      - "build"
      - "--tag"
      - "gcr.io/$PROJECT_ID/$_SERVICE_NAME:$_TAG_NAME"
      - "."
    timeout: 180s

    # PUSH IMAGE TO REGISTRY
  - name: "gcr.io/cloud-builders/docker"
    args:
      - "push"
      - "gcr.io/$PROJECT_ID/$_SERVICE_NAME:$_TAG_NAME"
    timeout: 180s

    # DEPLOY CONTAINER WITH GCLOUD
  - name: "gcr.io/google.com/cloudsdktool/cloud-sdk"
    entrypoint: gcloud
    args:
      - "run"
      - "deploy"
      - "$_SERVICE_NAME"
      - "--image=gcr.io/$PROJECT_ID/$_SERVICE_NAME:$_TAG_NAME"
      - "--platform=managed"
      - "--region=$_REGION"
      - "--port=8080"
      - "--allow-unauthenticated"
    timeout: 180s

# DOCKER IMAGES TO BE PUSHED TO CONTAINER REGISTRY
images: 
  - "gcr.io/$PROJECT_ID/$_SERVICE_NAME:$_TAG_NAME"

这是我的Dockerfile

FROM node:12-slim

WORKDIR /

COPY ./package.json ./package.json
COPY ./package-lock.json ./package-lock.json

COPY ./src ./src

RUN npm ci

从我的配置文件中,由于没有向copy文件node_modules夹告知任何内容,因此似乎没有必要添加node_modules.gcloudignore. 但是是吗?

我问这个是因为我看到这个答案说:

当您运行 gcloud builds submit... 时,您会提供一些源代码以及 Dockerfile 或配置文件。前者是后者的一个简单案例,一个配置文件包含一个运行 docker build.... 的单个步骤。

配置文件 (YAML) 列出了一系列容器镜像,其中包含串行运行的参数。最初,Cloud Build将指定的源(可以是当前目录)作为 /workspace 的目录(自动挂载到每个容器中)复制到 Compute Engine 虚拟机(由服务创建)。

如果它复制源,它也会复制node_modules吗?我应该添加它.gcloudignore还是没有必要?

标签: node.jsdockernode-modulesgcloudgoogle-cloud-build

解决方案


是的,您可以跳过节点模块,因为您不会在构建中使用它们(而且上传时间长且巨大)。在您的命令npm ci中,我确定您下载了依赖项,因此,node_modules.gcloudignore.gitignore


推荐阅读