使用 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
下)安装库,因此安装将持续进行以下步骤。
我构建了一个 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
下)安装库,因此安装将持续进行以下步骤。