测试和部署应用

地区 ID

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

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

详细了解地区 ID

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

在本地运行

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

部署应用

使用 gcloud app deploy 命令将您的应用部署到 App Engine。该命令会先使用 Cloud Build 服务自动构建一个容器映像,然后再将该映像部署到 App Engine 柔性环境。这个容器将包含您对运行时映像所做的全部本地修改。

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

准备工作

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

确保成功部署

如果您启用新版运行状况检查,但应用未达到正常运行状态,则系统将回滚部署。

在将第一个应用部署到柔性环境时,可能会出现延迟,原因是需要设置虚拟机 (VM) 和其他基础架构。初始设置后,运行状况检查会确保您的实例运行正常并已准备好接收流量。如果您的应用未在 app.yaml 文件 liveness_check 部分中的 initial_delay_sec 字段所示的指定时间内达到就绪状态,则您的部署将失败并回滚。

您的应用可能需要更长时间才能达到就绪状态。例如,您可能通过下载大型文件或预加载缓存来初始化您的应用。如果您使用的是新版运行状况检查,则可以通过修改 app.yaml 文件的 readiness_check 部分中的 app_start_timeout_sec 配置设置来延长准备时间。

如果部署失败,请确保 Cloud Build API 已在项目中启用。App Engine 会在您首次部署应用时自动启用此 API,但如果有人停用了 API,则部署将失败。

部署服务

通过部署应用服务的各个版本及其每个配置文件,将应用部署到 App Engine。

要部署应用服务的某个版本,请从服务的 app.yaml 文件所在的目录运行以下命令:

gcloud app deploy

如果使用该命令时不指定文件,则仅部署当前目录中的 app.yaml 文件。默认情况下,deploy 命令会为您所部署的版本生成一个唯一 ID,将该版本部署到 Cloud 项目(您已将 gcloud 工具配置为使用该项目),并将所有流量路由到新版本。

通过指定目标文件或添加其他参数,您可以更改此命令的默认行为:

  • 要部署服务的其他配置文件,您必须单独指定并部署每个文件。例如:

    gcloud app deploy cron.yaml
    gcloud app deploy dispatch.yaml
    gcloud app deploy index.yaml
    
  • 要指定自定义版本 ID,请使用 --version 标志。

  • 要阻止流量自动路由到新版本,请使用 --no-promote 标志。

  • 如需部署到特定 Cloud 项目,请使用 --project 标志。

例如,如需将 app.yaml 定义的服务部署到特定 Cloud 项目,请为该服务分配一个自定义版本 ID,并阻止流量路由到新版本:

gcloud app deploy --project PROJECT_ID --version VERSION_ID --no-promote

如需详细了解此命令,请查看 gcloud app deploy 参考

部署多项服务

您可以使用相同的部署命令来部署或更新应用中包含的多项服务。

要部署多项服务,您必须单独部署每项服务的 app.yaml 文件。例如:

gcloud app deploy service1/app.yaml
gcloud app deploy service2/app.yaml

您可以在一个部署命令中指定多个文件:

gcloud app deploy service1/app.yaml service2/app.yaml

部署多项服务的要求

  • 您必须先将应用的某个版本部署到 default 服务,然后才能创建和部署后续服务。

  • 您必须在每项服务对应的 app.yaml 配置文件中指定服务的 ID。要指定服务 ID,请在每个配置文件中添加 service 元素定义。如果没有在配置文件中添加此元素定义,则该版本默认部署到 default 服务。

忽略文件

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

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

手动构建容器以进行部署

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

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

gcloud app deploy --image-url gcr.io/YOUR_PROJECT_ID/YOUR_CONTAINER_IMAGE

使用自动连续部署流水线

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

PHP 版 Docker 基础映像

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

版本 Docker 命令
PHP 5.6 FROM gcr.io/google-appengine/php56
PHP 7.0 FROM gcr.io/google-appengine/php70
PHP 7.1 FROM gcr.io/google-appengine/php71
PHP 7.2 FROM gcr.io/google-appengine/php72
PHP 7.3 FROM gcr.io/google-appengine/php73

如需查看基础映像的源代码,请访问:https://github.com/GoogleCloudPlatform/php-docker

查看应用

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

gcloud app browse

在 App Engine 上执行测试

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

  1. 部署新版本并包含 --no-promote 标志:

    gcloud app deploy --no-promote
  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. 如需将流量发送到新版本,请使用 Cloud Console 迁移流量:

    管理版本

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

如需使用相同流程来测试其他服务的新版本,您可以将网址中的 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 项目无法启动。检查应用日志,了解更详细的错误消息。