测试和部署应用

区域 ID

REGION_ID 是 Google 根据您在创建应用时选择的区域分配的缩写代码。此代码不对应于国家/地区或省,尽管某些区域 ID 可能类似于常用国家/地区代码和省代码。对于 2020 年 2 月以后创建的应用,REGION_ID.r 包含在 App Engine 网址中。对于在此日期之前创建的现有应用,网址中的区域 ID 是可选的。

详细了解区域 ID

了解如何在本地运行您的应用,以及如何在 App Engine 上部署和测试应用。

在本地运行

如需在部署之前测试应用的功能,请用您经常使用的开发工具在本地环境中运行应用。

如需了解详情(包括如何根据您的插件使用特定的命令),请参阅 Java 8/Jetty 9 运行时的本地测试Java 8 运行时的本地测试

部署应用

准备工作

在部署应用之前,请做好以下准备:

部署服务

您可以使用任何受支持的工具,将 Java 应用部署到 App Engine 柔性环境。对于命令行部署,请使用 gcloud CLI 中的 gcloud app deploy,或者使用 MavenGradle 插件。如果使用 IDE 进行部署,可使用 IntelliJEclipse 插件。如需以编程方式部署应用,请使用 Admin API

忽略文件

您可以使用 .gcloudignore 文件指定在部署服务时不要上传到 Google Cloud 的文件和目录。如果要忽略不需要随部署上传的构建工件和其他文件,该文件非常实用。

如需详细了解 .gcloudignore 文件的语法,请参阅 gcloud 参考文档

手动构建容器以进行部署

如需在 Google Cloud Platform 之外构建容器映像,您必须先将映像上传到容器映像存储区中,然后才能使用 gcloud app deploy 命令将映像部署到 App Engine。

例如,如果您使用 Docker 在本地构建容器映像,可以将这些映像推送到 Google Container Registry,然后在命令的 --image-url 标志中指定映像的网址:

gcloud app deploy src/main/appengine/app.yaml --image-url gcr.io/YOUR_PROJECT_ID/YOUR_CONTAINER_IMAGE

使用自动连续部署流水线

您可以使用 Cloud Build 在连续部署流水线中自动执行部署。如需了解详情,请参阅 Cloud Build 文档中的部署工件使用构建触发器自动构建

适用于 Java 的 Docker 基础映像

如果您想从头开始构建 Java 自定义运行时应用,请在 Dockerfile 文件中使用提供的基础映像:

运行时 Docker 命令
Java 8 FROM gcr.io/google_appengine/openjdk
Java 8/Jetty 9 FROM gcr.io/google-appengine/jetty

查看应用

将应用部署到 App Engine 之后,您可以运行以下命令来启动浏览器,然后访问 https://PROJECT_ID.REGION_ID.r.appspot.com 来查看该应用:

gcloud app browse

在 App Engine 上执行测试

在配置新版本以接收流量之前,您可以在 App Engine 上测试新版本。例如,要测试 default 服务的新版本,请执行以下操作:

  1. 部署新版本,其中将 promote 参数设置为 false

  2. 转到以下网址以访问新版本:

    https://VERSION_ID-dot-default-dot-PROJECT_ID.REGION_ID.r.appspot.com

    现在,您可以在 App Engine 运行时环境中测试新版本。如需对应用进行调试,您可以在 Google Cloud Console 的日志浏览器中查看其日志。如需了解详情,请参阅写入应用日志

    发送到 https://PROJECT_ID.REGION_ID.r.appspot.com 的请求仍将路由到先前配置为接收流量的版本。

  3. 如需将流量发送到新版本,请使用 Google Cloud 控制台迁移流量:

    管理版本

    选择刚部署的版本,然后点击迁移流量

如需使用相同的流程来测试其他服务的新版本,您可以将网址中的 default 替换要测试的服务的名称:

如需详细了解如何指定目标服务和版本,请参阅请求的路由方式

问题排查

下面是部署应用时您可能遇到的常见错误消息:

PERMISSION_DENIED: Operation not allowed
The "appengine.applications.create" permission is required.
如果 Cloud 项目不包含所需的 App Engine 应用,则 gcloud app deploy 命令在尝试运行 gcloud app create 命令时可能会失败。只有拥有 Owner 角色的帐号才具备创建 App Engine 应用所需的权限。
502 Bad Gateway
如果 app.yaml 配置错误,Cloud 项目无法启动。检查应用日志,了解更详细的错误消息。
[13] An internal error occurred while creating a Cloud Storage bucket.

App Engine 将代表您在应用创建的同一区域中创建默认的 Cloud Storage 多区域存储桶。此存储桶是存储应用内容所必需的。无法创建此存储桶时,在以下情况下会返回此错误:

[13] An internal error occurred.

如果您使用共享 VPC 设置部署具有网络配置的服务,则可能会发生此错误。确保您的 App Engine 柔性环境满足此配置的所有要求。接下来,请确保您的项目中存在为此设置配置的服务帐号,否则,您必须恢复帐号。请注意,共享 VPC 宿主项目中子网的区域必须与创建 App Engine 环境的位置相匹配。

如果在确保 app.yaml 配置有效后此问题仍然存在,请使用 Google Cloud SDK 重新部署您的服务,添加 --verbosity=debug 标志,然后联系 GCP 支持并提供该命令的输出。

IP space of {USER_SUBNETWORK_NAME} is exhausted and needs to be expanded.

如果部署失败并显示此错误消息,则表示为 App Engine 服务配置的网络没有剩余地址可分配给服务的新实例。您可以通过在针对 App Engine 柔性环境服务配置的子网上扩展 VPC 范围来解决此问题。