使用 Cloudbuild 部署到 App Engine 失败

Deployment to App Engine using Cloudbuild failing

我构建了一个 Node + Vue JS 项目,该项目的结构具有不同的前端和后端代码目录。 /api 是具有自己的 package.json 的后端代码,ui 是具有自己的 package.json 的前端代码。该项目的结构如下:

/app
  /api
    package.json
  /ui
    package.json
  /config
    cloudbuild.yaml

我正在尝试使用 Cloudbuild 将项目部署到 App Engine。 cloudbuild.yaml 文件的结构如下:

steps:
- name: gcr.io/cloud-builders/gcloud:latest
  entrypoint: "ls"
  args: ["-lah","/workspace"]
- name: node
  entrypoint: yarn
  args: ["install"]
  dir: "api"
- name: node
  entrypoint: yarn
  args: ['global', 'add', '@vue/cli']
  dir: "ui"
- name: node
  entrypoint: yarn
  args: ['run', 'build']
  dir: "ui"
- name: "gcr.io/cloud-builders/gcloud"
  args: ["app", "deploy", "./app.yaml"]
timeout: "1600s"

步骤 0-2 成功完成,但在构建用于生产的 Vue 应用程序时构建失败,特别是 yarn run build 的命令。此命令在 /ui 目录的 package.json 中列为 vue-cli-service build.

错误是/bin/sh: 1: vue-cli-service: not found

Cloudbuild 似乎找不到 vue-cli,好像它没有安装或者不知道要构建什么。

我的问题是如何使用 Cloudbuild 将具有单独目录的项目部署到 App Engine?

Cloud Build 的核心原则之一是在每一步都从下一个执行上下文开始。每个步骤之间只保留 /workspace 目录。

在第 3 步中,您全局安装了 vue cli,因此,不是在当前目录(工作区的子目录)中,而是在容器运行时目录(/etc 或其他地方;在任何情况下, 不在工作区下。

如果删除 global 参数,您将在本地应用程序目录(在 /workspace 下)安装库,因此安装将持续进行以下步骤。