我已经构建了一个使用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
目录在每个步骤之间保留。在第三个步骤中,您在全局安装vue cli,因此不在当前目录(workspace的子目录)中,而是在容器运行时目录(
/etc
或其他地方;在任何情况下,都不在workspace下)。如果您删除
global
参数,您将在应用程序目录(/workspace
下)中本地安装库,因此安装将在后续步骤中持续存在。