我已經建立了一個使用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
下)中本機安裝庫,因此安裝將在後續步驟中持續存在。