google-app-engine - 即使服务正在运行,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_check
and添加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
使用什么标准来确定终止条件?另外,有没有绕过这个问题?
更新
gcloud app deploy
从本地环境(我的笔记本电脑)运行命令时也会出现问题。- 删除 --no-promote 标志时不会发生此问题。
解决方案
该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.yml
package.json
为了从 Bitbucket 将测试存储库部署到 App Engine,请确保对项目执行以下操作:
启用 API:
- App 引擎管理员
- 云构建
创建具有以下权限的服务帐户,并生成 API 密钥:
- App Engine:管理员
- Cloud Build:编辑器
- 存储:对象管理
推荐阅读
- swift - 屏幕保护程序结束后音频继续播放
- asp.net-core-mvc - Azure AD B2C 的 TokenValidationParameters - 什么是正确的配置?
- python - 在 Visual Studio 上运行 32 位 python
- reactjs - 反应路由器:正确导航到新页面
- android - java.lang.RuntimeException:在类 android.widget.DatePicker 上发现名称 getOverlay 的 getter 冲突
- typescript - 所有子项目的通用类型
- firebase - 注册新的firebase帐户flutterfire后应用程序崩溃
- amazon-web-services - AWS ApiGateway 输入映射
- monaco-editor - 如何更新滚动类型?
- .net-core - GCMemoryInfo.GenerationInfo 中的 GCGenerationInfo 实例代表什么?