You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GCP生产部署失败时快速回滚至之前的可用镜像?

解决GCP生产环境构建失败后的快速回滚问题

嘿,我完全懂你现在的焦虑——生产部署时构建炸了,还有一堆用户在正常用着,得赶紧切回之前的稳定版本对吧?别担心,咱们用GCP自带的工具就能快速搞定,不用绕弯路去拉取再推送镜像然后执行gcloud build submit(你之前踩的坑很正常,因为这条命令本来就是用来从本地文件夹构建新镜像的,不是部署已有镜像)。

下面分两种最常用的场景给你解决方案:

场景1:你用的是Google Cloud Deploy流水线(即平时用gcloud deploy的方式)

这是最直接的回滚方式,因为Cloud Deploy本身就保留了所有历史部署记录:

  1. 先找到之前成功的版本
    运行这条命令列出你的流水线所有发布记录,找到那个你想回滚到的、状态为成功的release ID:

    gcloud deploy releases list --delivery-pipeline=你的流水线名称 --region=你的GCP区域
    

    替换里面的你的流水线名称和你的GCP区域(比如us-central1),执行后你会看到类似这样的输出,重点找STATE为SUCCESS的条目:

    NAME              STATE       TARGETS
    release-20240520  SUCCESS     prod
    release-20240519  FAILURE     prod
    release-20240518  SUCCESS     prod
    
  2. 执行回滚操作
    用找到的成功release ID,运行这条命令把它重新推送到生产目标:

    gcloud deploy releases promote --release=你要回滚的release ID --delivery-pipeline=你的流水线名称 --region=你的GCP区域 --to-target=你的生产环境目标名
    

    比如你的生产目标叫prod,release ID是release-20240518,那命令就是:

    gcloud deploy releases promote --release=release-20240518 --delivery-pipeline=my-app-pipeline --region=us-central1 --to-target=prod
    

    这条命令会直接把之前成功的版本重新部署到生产环境,全程不用重新构建,速度很快。

场景2:你直接部署到Cloud Run/GKE这类服务(未通过Cloud Deploy流水线)

如果你的应用是直接部署到Cloud Run或者GKE,那可以直接指定已有的镜像版本进行部署:

针对Cloud Run:

运行这条命令,直接指定你之前的稳定镜像地址:

gcloud run deploy 你的服务名称 --image=gcr.io/你的GCP项目ID/你的镜像名:稳定版本标签 --region=你的GCP区域

比如你的镜像标签是v1.0.0,那命令就是:

gcloud run deploy my-app-service --image=gcr.io/my-project-12345/my-app:v1.0.0 --region=us-central1

针对GKE:

用kubectl直接更新部署的镜像:

kubectl set image deployment/你的部署名称 你的容器名称=gcr.io/你的GCP项目ID/你的镜像名:稳定版本标签 -n 你的命名空间

额外建议

为了以后回滚更顺畅,建议你每次成功构建后,给镜像打上明确的、可追溯的标签(比如Git commit hash、版本号v1.0.1这类),而不是只用latest标签,这样你能快速定位到要回滚的版本,避免混乱。

内容的提问来源于stack exchange,提问作者Rakhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 08:57:41