使用 java11 在 Google App Engine 上部署单个 jar 时阻止构建尝试

Prevent build attempt when deploying single jar on Google App Engine with java11

我有一个 spring java 项目,该项目建立在 CI 系统上 google 云之外。最终的构建命令是 gradle bootJar 。我想将生成的 jar 部署到 Google App Engine。

建议的方法是调用 gcloud app deploy my.jar 。不幸的是,这种方法对我不起作用,因为应用程序需要比默认实例类型 (F1 = 256MB) 提供的更多的 RAM。所以我必须以某种方式指定实例类型。

我目前的方法是创建一个自定义 app.yaml - 还有一个 .gcloudignore 以确保只上传 jar。我的 app.yaml 看起来像这样:

runtime: java11
instance_class: F2
entrypoint: java -noverify -jar my.jar

当实例运行时,实例日志表明正在并行尝试构建(日志摘录):

Starting Step #5 - "builder"
Step #5 - "builder": Already have image (with digest): eu.gcr.io/gae-runtimes/buildpacks/java11/builder:java11_20200913_11_0_RC00
Step #5 - "builder": === Java - App Engine (google.java.appengine@0.9.0) ===
Step #5 - "builder": DEBUG: Using GOOGLE_RUNTIME: java11
Step #5 - "builder": DEBUG: Using config appengine.Config{Runtime:"java11", Entrypoint:appengine.Entrypoint{Type:"User", Command:"java -noverify -jar my.jar", WorkDir:""}, MainExecutable:""}
Step #5 - "builder": === Utils - Label Image (google.utils.label@0.0.1) ===
Finished Step #5 - "builder"

当我在 gcloud app deploy 中直接指定 jar 时,这些构建尝试不会发生,但如上所述,由于内存原因失败。

理想情况下,我想使用自己的 app.yaml 来指定其他配置选项。但我不想一直在进行构建。

那么有没有办法抑制这些构建尝试,或者将通常在 app.yaml 中的其他配置选项传递给 gcloud app deploy my.jar 调用?

您尝试执行的操作是不可能的,如果您使用 app.yaml 来部署您的应用程序,构建将始终被触发,如果您使用 gradle,您将无法 select instance_class 就像 app.yaml 一样可以让你做到。因此,没有针对您的问题的最佳解决方案,但是有一个替代方案,即使用 App Engine Flex 部署包含 my.jar 文件的容器。

您可以查看此 link for how to create a docker file to run a .jar app. Also in this documentation you can see how you can deploy that docker containing your jar file to App Engine Flex, this configuration will also create an app.yaml file and in that app.yaml you can specify the infrastructure that you will need to run your app. As you can see in this second documentation,您可以将以下配置块添加到 app.yaml 以让 App Engine Flex 知道您的应用程序容器需​​要多少基础设施:

resources:
  cpu: 2
  memory_gb: 2.3
  disk_size_gb: 10
  volumes:
  - name: ramdisk1
    volume_type: tmpfs
    size_gb: 0.5

注意:由于您已经启动了您的应用程序并且 运行 在 App Engine Standard 的实例中,我会说建议的替代方案不值得付出努力,如果您可以简单地忽略构建日志。