代码之家  ›  专栏  ›  技术社区  ›  imjared

如何使用docker+Google Cloud build公开构建步骤结果

  •  0
  • imjared  · 技术社区  · 5 年前

    我正试图在monorepo中使用Yarn工作区在Google Cloud上构建next.js应用程序。我发现在构建过程中最慢的一点是安装节点模块,因为我们必须在几个不同的文件夹中进行安装。理想情况下,我想利用Docker来处理 node_modules 如果一切都没有改变。我的档案如下:

    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的内容,如果没有任何更改,它将为 节点模块 . 一个非常关键的步骤是我们安装 next 稍后在生成过程中使用它从 package.json :

    "scripts": {
      "build": "next build",
      ...
    }
    

    但是,当我进入第二步时 cloudbuild.yaml ,我的生成错误 env: 'next': No such file or directory .

    似乎我需要以某种方式“浮出水面”(因为没有更好的术语),无论在 云构建.yaml 并使 下一个 命令可用于第二步。但我的问题是我该怎么做?

    我应该注意到,我对Docker还不太熟悉,我一直在想Docker的工作原理。

    0 回复  |  直到 5 年前
        1
  •  2
  •   Kolban    5 年前

    云构建的理念是,我们将各个步骤串联起来构建一个结果(通常是一个新的docker图像或要写入GCS的工件)。云构建配方中的每个步骤本身都在其自己的docker容器实例中运行。每个步骤之间的共享是 /workspace 这是一个共享卷。我们的想法是,每个步骤都会通过在/workspace操作数据来为构建增加一些价值。

    云构建配方中的第一个命令将生成一个新的Docker映像,该映像存储在Docker映像的本地缓存中。但是,Dockerfile中描述的命令将在Docker映像中执行,以便构建映像。它们不会对您的/工作区环境进行任何更改,因此在您的第二个云构建步骤中不会发现任何“新”内容。