Cloudbuild 无法从我的 Vue 应用程序中找到我的 package.json

Posted

技术标签:

【中文标题】Cloudbuild 无法从我的 Vue 应用程序中找到我的 package.json【英文标题】:Cloudbuild can't find my package.json from my Vue app 【发布时间】:2021-07-26 05:28:51 【问题描述】:

我正在尝试通过 GCP Cloud Build 将 Vue JS 应用程序部署到 GCP App Engine。我已按照说明在与 app.yaml 文件不同的目录中创建了 cloudbuild.yaml 文件。构建错误与

error Couldn't find a package.json file in "/workspace"

cloudbuild.yaml 文件的前两步看起来执行成功,但在尝试运行构建时却失败了。

目录是这样的:

root/
├─ config/
│  ├─ cloudbuild.yaml
app.yaml
package.json

这是我的 app.yaml 文件

runtime: nodejs10
service: icx-ui

handlers:
# Serve all static files with urls ending with a file extension
- url: /(.*\..+)$ 
  static_files: dist/\1
  upload: dist/(.*\..+)$
# catch all handler to index.html
- url: /.*
  static_files: dist/index.html
  upload: dist/index.html

我的cloudbuild.yaml如下:

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

如您所见,我在 app.yaml 文件中添加了文件路径

【问题讨论】:

如何运行 Cloud Build?什么是命令或触发器配置? 当然可以。我在项目根目录并发送--config 标志。这是我用来触发构建gcloud builds submit --config ./config/cloudbuild.yaml ./dist 的命令。最后一个参数是构建文件所在的目录 感谢您的评论,Dondi 提供了正确答案;) 谢谢@dondi。项目已成功构建和部署! 【参考方案1】:

gcloud builds submit 命令的定义源目录是dist/,这是您的应用程序的构建生产版本。该目录默认不包含 package.json 和 app.yaml。

在 Cloud Build 上运行 yarn run build 需要 src/package.json 等文件来构建 您将通过 App Engine 提供的文件 (dist)。解决方法是指定根项目为构建的源目录:

gcloud builds submit --config ./config/cloudbuild.yaml .

如果在某些情况下这让您担心部署中包含一些不必要的文件,例如 node_modules,您可以通过在 .gcloudignore 上指定这些文件来忽略这些文件。

【讨论】:

以上是关于Cloudbuild 无法从我的 Vue 应用程序中找到我的 package.json的主要内容,如果未能解决你的问题,请参考以下文章

在 Terraform 和 Cloudbuild 中找不到 Gsutil

无法在 CloudBuild 中拉取 golang 映像

无法使用 cloudbuild.yaml 配置机密以部署到 cloudrun 以实现对话流 basicauth

如何在 cloudbuild.yaml 中使用 Kaniko?

从我的 vue 应用程序访问 firebase 时,addAuthTokenListener 不是一个函数

Cloudbuild 中的秘密环境变量(没有文件),如何?