首页 > 解决方案 > 即使服务正在运行,gcloud app deploy 也不会终止

问题描述

我正在从 Bitbucket 管道环境将 node.js 服务器部署到 Google App Engine,脚本中的最后一个命令是:gcloud -q app deploy app.yaml --no-promote --verbosity=debug

日志显示服务部署成功,但脚本没有终止,这是日志的最后一部分:

> DEBUG: Reading GCS logfile: 206 (read 10 bytes) PUSH DONE DEBUG:
> Operation [...] complete. Result: {...} DEBUG: Reading GCS logfile:
> 416 (no new content; keep polling)
> -------------------------------------------------------------------------------- DEBUG: Converted YAML to JSON: "{...}" DEBUG: Operation [...] not
> complete. Waiting to retry. Updating service [default] (this may take
> several minutes)... .DEBUG: Operation [...] not complete. Waiting to
> retry. ......DEBUG: Operation [...] not complete. Waiting to retry.
> .......DEBUG: Operation [...] not complete. Waiting to retry.
> ......DEBUG: Operation [...] not complete. Waiting to retry.
> .......DEBUG: Operation [...] not complete. Waiting to retry.
> .......DEBUG: Operation [...] not complete. Waiting to retry.

我尝试将readiness_checkand添加liveness_check到 app.yml 但它并没有改变行为。

readiness_check:
  path: "/api/public/logout"
  check_interval_sec: 5
  timeout_sec: 4
  failure_threshold: 2
  success_threshold: 2
  app_start_timeout_sec: 300
liveness_check:
  path: "/api/public/logout"
  check_interval_sec: 30
  timeout_sec: 4
  failure_threshold: 2
  success_threshold: 2

这里主要的未知数是gcloud app deploy使用什么标准来确定终止条件?另外,有没有绕过这个问题?

更新

  1. gcloud app deploy从本地环境(我的笔记本电脑)运行命令时也会出现问题。
  2. 删除 --no-promote 标志时不会发生此问题。

标签: google-app-enginegoogle-cloud-platformgcloudbitbucket-pipelines

解决方案


gcloud app deploy命令需要一个格式正确且有效的app.yml文件,这决定了它的终止条件。

当您确认部署在没有--no-promote标志的情况下工作时,这可能意味着配置中的某些内容期望应用程序已经部署并运行,从而阻止脚本完成。

另一个可能的原因是 中指定的 Google Cloud SDK 版本bitbucket-pipelines.yml较旧。确保您使用最新的. 这一考虑广泛适用于 中的所有依赖项package.json,它们可能相互冲突,尤其是在使用旧版本的 Node.js时。

本指南有助于为基于 Bitbucket 的部署构建合理的配置;尽管给出的示例使用的是 Python,但它也可以用作处理 Node.js 管道的模板。

NB。在本方案中,Google Cloud SDK版本较旧 (127.0.0),会导致本次部署失败,应更换为最新版本(228.0.0 或更高版本)。该指南还省略了另一个必需的 API 激活:Cloud Build API。我已通知团队修改解决方案。

我用一个简单的 Node.js 服务器测试了几个场景,但无法重现该问题。检查我的Github 存储库中的代码

有关此主题的进一步帮助,请提供更多提示,例如、 和文件的内容app.yml,以及对 App Engine 状态(服务、版本)的描述。bitbucket-pipelines.ymlpackage.json

为了从 Bitbucket 将测试存储库部署到 App Engine,请确保对项目执行以下操作:

  1. 启用 API:

    • App 引擎管理员
    • 云构建
  2. 创建具有以下权限的服务帐户,并生成 API 密钥:

    • App Engine:管理员
    • Cloud Build:编辑器
    • 存储:对象管理

推荐阅读