【问题标题】:Unable to provide custom app.yaml file for Java GCP App Engine project无法为 Java GCP App Engine 项目提供自定义 app.yaml 文件
【发布时间】:2020-12-19 18:19:11
【问题描述】:

我有一个 Java 11 GCP App Engine 项目,我正在尝试根据环境使用不同的 app.yaml 文件(例如,app-dev.yamlapp-prod.yaml 等)。 /appengine目录下的yaml文件如src/main/appengine/app-dev.yaml等。

有一个SO post about this already,但答案不起作用,因为它破坏了descriptor,在Java中应该是pom.xml(有关更多信息,请参阅我的方法2)。

方法#1

更新:已解决!要使用这种方法,您必须使用 gcloud 298.0.0+

首先,我尝试使用https://cloud.google.com/sdk/gcloud/reference/app/deploy#--appyaml 中的--appyaml=APPYAML 参数:

gcloud app deploy [DEPLOYABLES …] [--appyaml=APPYAML] [--bucket=BUCKET] ...

我运行以下命令并收到 appyaml 参数无法识别的错误。

$ gcloud --project=my-project app deploy --appyaml=app-dev.yaml
ERROR: (gcloud.app.deploy) unrecognized arguments: --appyaml=app-dev.yaml 

app-dev.yaml 的完全限定路径也不起作用。

方法#2

接下来我在https://cloud.google.com/appengine/docs/flexible/java/configuring-your-app-with-app-yaml 中发现了一个略有不同的语法,如下所示:

gcloud app deploy service-name-app.yaml

我在本地尝试了同样的方法,但指向我的自定义 app-dev.yaml 就像这样,但它坏了:

$ gcloud --project=my-project app deploy src/main/appengine/app-dev.yaml
...
descriptor:      [/Users/SomeDev/IdeaProjects/my-project/app-server/src/main/appengine/app-dev.yaml]
source:          [/Users/SomeDev/IdeaProjects/my-project/app-server/src/main/appengine]
target project:  [my-project]
target service:  [default]
target version:  [20200831abcdefg]
target url:      [https://my-project.uc.r.appspot.com]

这会中断,因为它认为app-dev.yamldescriptor 文件而不是pom.xml,因此会出现以下错误:

Error message: did not find any jar files with a Main-Class manifest entry

为了比较,我在没有自定义 yaml 文件的情况下运行正常部署,您可以看到 pom.xmldescriptor 的值。

$ gcloud --project=my-project app deploy
...
descriptor:      [/Users/SomeDev/IdeaProjects/my-project/app-server/pom.xml]
source:          [/Users/SomeDev/IdeaProjects/my-project/app-server]
target project:  [my-project]
target service:  [default]
target version:  [20200831abcdefg]
target url:      [https://my-project.uc.r.appspot.com]

是否有推荐的方法来完成这项工作,或者这完全是错误的方法?

【问题讨论】:

  • 您是否能够在没有复杂的 app-ENV.yaml 文件逻辑的情况下部署您的应用程序?

标签: google-app-engine google-cloud-platform yaml gcloud


【解决方案1】:

查看您的“方法 #1”,您必须将 gcloud 升级到版本 >= 298.0.0 这里 --appyaml 参数已添加 - 就在 20 年 6 月。

查看您的“方法 #2”。如果您正在运行gcloud app deploy(不带参数),它将在当前目录中搜索描述符app.yaml,如果未找到,则搜索pom.xml。如果您想使用来自不同本地化的pom.xml,您必须将其从当前目录中删除。我没有测试到最后,只是对描述符值进行了总结测试。

无论如何,我不认为使用上述方法是最好的方法。当您使用pom.xml 作为描述符时,这意味着您正在使用名为“deploy your Maven project as source code”的功能。这不是使用 maven 部署应用引擎的主要方式。

根据我的理解,如果使用 maven 进行构建,则可以使用 entrypointapp.yaml 文件 (reference) 或 maven 目标 appengine:deploy (reference + article that should be interesting) 中的 jar。

【讨论】:

  • 我想确认是版本问题。我在297.0.0,几天前几乎没有错过正确的版本!运行gcloud components update 修复了所有问题,现在--appyaml 可以工作了。感谢您发现细微差别。
猜你喜欢
  • 2019-03-19
  • 1970-01-01
  • 2021-01-31
  • 2019-06-06
  • 2017-09-07
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 2020-12-23
相关资源
最近更新 更多