测试和部署应用

地区 ID

REGION_ID 是 Google 根据您在创建应用时选择的地区分配的缩写代码。此代码不对应于国家/地区或省,尽管某些地区 ID 可能类似于常用国家/地区代码和省代码。在 App Engine 网址中包含 REGION_ID.r 对于现有应用是可选项,但在不久后将成为所有新应用的必要项。

为了确保顺利过渡,我们正在逐步更新 App Engine 以使用地区 ID。如果我们尚未更新您的 Google Cloud 项目,则您不会看到应用的地区 ID。由于该 ID 对于现有应用是可选的,因此您在现有应用可以使用地区 ID 后无需更新网址或进行其他更改。

详细了解地区 ID

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

在本地运行

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

准备工作

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

部署应用

您可以使用以下任一方法来部署应用:

如需以编程方式部署应用,请使用 Admin API

部署应用的源代码

如果您使用 MavenGradle 来管理应用的本地构建,并且应用的所有依赖项都可以公开下载,那么您可以从应用的 pom.xmlbuild.gradle 文件所在的目录输入 gcloud app deploy 命令:

gcloud app deploy

该命令指示 Cloud Build 使用 App Engine Buildpack 构建应用并将其部署到 App Engine。

如果您使用 Maven,则相应的情况如下:

  • Buildpack 使用以下构建命令:mvn clean package --batch-mode -DskipTests

  • 如果应用的根目录包含 mvnw 文件,则构建命令会使用 ./mvnw 替换 mvn。然后,Cloud Build 在 target 目录中查找包含主类清单条目的 .jar 文件,并创建一个值为 java -jar <jarfile>entrypoint

如果您使用 Gradle,则相应的情况如下:

  • Buildpack 使用以下构建命令:gradle clean assemble -x test --build-cache

  • 如果应用的根目录包含 gradlew 文件,则构建命令会使用 ./gradlew 替换 gradle。然后,Cloud Build 在 build/libs 目录中查找包含主类清单条目的 .jar 文件,并创建一个值为 java -jar <jarfile>entrypoint

  • 请确保您的项目的根目录中没有 pom.xml。Maven 项目优先于 Gradle 项目。

Cloud Build 会流式传输构建日志和部署日志,您可以在 Cloud Console 的 Cloud Build 历史记录部分查看这些日志。

关于此部署方法,请注意以下事项:

  • 如果应用具有仅在本地可用的依赖项,则 Cloud Build 无法构建应用,并且部署将失败。在这种情况下,我们建议您改用 App Engine Maven 或 Gradle 插件。

  • 构建应用时会用到 Cloud Build 配额,而存储应用的源代码时则会用到 Cloud Storage 配额。Cloud Build 和 Cloud Storage 提供免费配额,只要您的用量未超出免费配额,部署 App Engine 应用就不会产生费用。如需了解详情,请参阅价格

  • 目前,您无法为 Gradle 构建命令指定其他参数。如需了解详情,请参阅 Google 问题跟踪器

使用 App Engine Maven 或 Gradle 插件

App Engine 提供了 Maven 和 Gradle 插件,可用于构建和部署应用。例如,设置 App Engine Maven 插件后,您可以从项目的 pom.xml 文件所在的目录输入以下命令:

mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID

PROJECT_ID 替换为您的 Cloud 项目 ID。如果您的 pom.xml 文件已经指定了您的项目 ID,则您无需在运行的命令中添加 -Dapp.deploy.projectId 属性。

如需了解详情,请参阅使用 Apache Maven 和 App Engine 插件使用 Gradle 和 App Engine 插件

部署可执行 JAR 文件

使用任何构建框架在本地构建可执行 JAR 文件,然后根据您是否为应用创建 app.yaml 文件,执行以下某项操作:

  • 如果您创建了 app.yaml 文件:

    1. 将该文件复制到您创建的可执行 JAR 文件所在的目录中。

    2. 从包含 app.yaml 和 JAR 的目录中,输入以下命令:

      gcloud app deploy
  • 如果您尚未创建 app.yaml 文件,请输入以下命令:

    gcloud app deploy your-executable.jar

    gcloud app deploy 将使用所有默认值创建一个包含最低设置的 app.yaml 文件。

忽略文件

您可以使用 .gcloudignore 文件指定在部署服务时不会上传到 App Engine 的文件和目录。如果要忽略构建工件和其他无需随部署上传的文件,这种做法会非常实用。

管理构建映像

您每次部署新版本时,系统都会使用 Cloud Build 服务创建一个容器映像。该容器映像随后会在 App Engine 标准环境中运行。

构建的容器映像存储在 Container Registryapp-engine 文件夹中。您可以下载这些映像,以便在其他位置存储或运行。部署完成后,App Engine 便不再需要容器映像。请注意,容器映像不会自动删除,因此为了避免达到存储空间配额,您可以安全地删除不再需要的任何映像。如需详细了解如何在 Container Registry 中管理映像,请参阅 Container Registry 文档

查看应用

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

gcloud app browse

在迁移流量之前在 App Engine 上进行测试

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

  1. 部署新版本,但阻止流量自动路由到新版本:

    mvn appengine:deploy -Dapp.deploy.projectId=PROJECT_ID -Dapp.deploy.promote=False

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

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

    现在,您可以在 App Engine 运行时环境中测试新版本。您可以通过查看应用日志来调试应用。如需了解详情,请参阅写入应用日志

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

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

    管理版本

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

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

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

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

使用 Cloud Debugger

您可以使用 Debugger 在任何代码位置检查已部署应用的状态,而无需停止应用或降低运行中应用的运行速度。

如需将 Debugger 与 Java 11 应用一起使用,需要在 app.yaml 文件的 entrypoint 字段中包含以下标志:

-agentpath:/opt/cdbg/cdbg_java_agent.so=--log_dir=/var/log

如果您已app.yaml 文件中指定 entrypoint,请在 entrypoint 字段中将 agentpath 标志添加到 java 命令。

如果您尚未指定 entrypoint 字段,或者在部署应用时生成 app.yaml 文件,App Engine 会将该标志添加到用于启动应用的命令。

使用 Cloud Profiler

Cloud Profiler 是一个低开销的统计性能剖析器,可从生产应用中持续收集有关 CPU 使用情况和内存分配情况的信息。它会将这些信息归因于您应用的源代码,帮助您识别应用消耗最多资源的部分,并说明代码的性能特征。

如需使用 Cloud Profiler,请按照启动程序中的说明设置应用的配置文件,然后重新部署应用。