无法为Java GCP App Engine项目提供自定义app.yaml文件

问题描述

我有一个Java 11 GCP App Engine项目,并且我尝试根据环境使用不同的app.yaml文件(例如app-dev.yamlapp-prod.yaml等)。 yaml目录中的/appengine文件,例如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]

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

解决方法

要查看“方法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部署App Engine的主要方法。

根据我的理解,如果使用maven进行构建,则有可能使用entrypoint文件(referenceapp.yaml中的jar或maven目标appengine:deploy({ {3}} + reference)。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...