执行gcloud app deploy成功但App Engine代码未更新的原因
App Engine 执行
gcloud app deploy提示成功但代码未更新的常见排查方向 - 流量未切换到新版本
这是最高发的原因:默认新版gcloud部署会自动切100%流量到新版本,但如果你之前手动调过流量拆分规则、部署时带了--no-promote参数,或是用的旧版CLI,新版本部署完只会停在版本列表里,不会接任何流量。直接去App Engine控制台的「版本」页看刚打的新版本流量占比,要是显示0,手动把100%流量切过去就行,下次部署加--promote参数就会自动切流。 - 部署上传的文件本身不是最新代码
别觉得这个问题低级,至少三分之一的人踩过这个坑:如果是需要构建的Node.js项目(比如前端项目、TS写的后端),改完源码忘了跑npm run build,dist/build目录里还是旧产物,gcloud只会上传你当前目录下的现有文件,传上去的当然是旧代码。另外记得查下.gcloudignore和app.yaml的handlers配置,别不小心把存新代码的目录加到忽略上传列表里了。 - 命中多层缓存
缓存问题也很常见:先按Ctrl+F5硬刷,或者开无痕模式访问,排除浏览器本地缓存的问题;如果你的App Engine前面挂了Cloud CDN或者其他负载均衡,记得去刷下CDN缓存,CDN节点存了旧内容的话源站更新了也没用;另外App Engine本身对静态资源默认有10分钟的缓存周期,刚更完静态资源短时间访问到旧内容是正常的。 - 部署目标不匹配
查下你当前gcloud的上下文对不对,执行gcloud config list看激活的项目是不是你要部署的目标项目,控制台切了项目不代表CLI的上下文也跟着切了。如果你的应用有多个服务,部署的时候记得加--service=你的服务名,不然很容易把代码部署到同项目下的其他服务里,你访问原地址当然看不到更新。稳妥点的话每次部署都明确带上--project=目标项目ID --service=目标服务名参数,不会错。 - 新版本实例未通过健康检查被自动回滚
别信deploy命令的成功提示,那个提示只代表文件上传完了、版本资源建好了,根本不代表新版本能正常跑。如果新版本启动时报错、健康检查一直不通过,App Engine会自动把流量切回之前能正常跑的旧版本,你访问到的自然还是旧代码。直接去日志浏览器筛刚部署的新版本的实例日志,看启动阶段有没有报错,再去版本页看新版本的实例是不是正常就绪、健康检查有没有过。 - 柔性环境实例切换延迟
如果你用的是App Engine柔性环境,别刚看到部署成功就立刻访问,柔性环境新实例启动、旧实例连接排空要1~3分钟,刚部署完立刻访问大概率命中正在下线的旧实例,等个两三分钟再试就行。
内容的提问来源于stack exchange,提问作者Yves-Marie Ip
相关产品推荐
相关产品推荐

