即使服务正在运行,gcloud app部署也不会终止

时间:2018-12-01 16:36:52

标签: google-app-engine google-cloud-platform gcloud bitbucket-pipelines

我正在从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_checkliveness_check添加到a​​pp.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标志时,不会发生此问题。

1 个答案:

答案 0 :(得分:1)

gcloud app deploy command需要格式正确且有效的app.yml文件,这是决定其终止条件的原因。

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

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

本指南可帮助构建声音configuration for Bitbucket-based deployments;尽管给出的示例是使用Python的,但它也可以用作处理Node.js管道的模板。

Nb。 在此解决方案中,Google Cloud SDK version is an older one (127.0.0)将使此部署失败,因此应将其替换为最新版本(228.0.0或更高版本)。该指南还忽略了另一个必需的API激活:Cloud Build API。我已通知团队修改解决方案。

我已经用一个简单的Node.js服务器测试了几种方案,并且无法重现该问题。检查我的Github repository for the code

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

为了将测试存储库从Bitbucket部署到App Engine,请确保在项目上完成以下操作:

  1. 启用API:

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

    • App Engine:管理员
    • 云构建:编辑器
    • 存储:对象管理