为何GCP Build搭配Google Run每次触发都会创建新服务?如何更新服务?
GCP Build部署Google Run重复创建服务的问题处理
问题描述
我搭建了基础的CI/CD流程,向GitHub仓库推送代码时会触发构建,本应通过GCP Build将代码部署至Google Run,但目前每次触发都会在云账号中创建新服务,不清楚原因。期望的是更新Google Run上当前运行的服务,或是创建新服务后将100%流量迁移至新服务并删除旧服务。
部署界面高亮区域截图:
排查与解决步骤
1. 确认部署命令的服务名称是否固定
Google Run会根据服务名称区分实例,若部署命令中服务名动态变化(比如包含Git哈希、时间戳),就会每次创建新服务。检查你的gcloud run deploy命令,确保服务名称是固定值:
# 正确示例:固定服务名 gcloud run deploy my-fixed-service --image gcr.io/my-project/my-image --region us-central1
2. 检查GCP Build触发器的部署配置
结合截图中高亮的区域,重点排查:
- 触发器的部署步骤是否自动生成了带后缀的服务名
- 是否存在默认勾选"创建新服务"的选项(部分可视化配置界面会有这类隐性设置)
3. 实现更新+流量迁移+旧服务清理的流程
如果需要保留新版本部署并自动完成流量迁移、旧版本清理,可使用以下命令组合:
# 部署新版本(基于已有服务创建修订版本,不新增服务) gcloud run deploy my-fixed-service --image gcr.io/my-project/my-image --region us-central1 # 强制将100%流量切换到最新修订版本 gcloud run services update-traffic my-fixed-service --to-latest # 删除所有未被流量指向的旧修订版本 gcloud run revisions delete $(gcloud run revisions list --service my-fixed-service --filter="TRAFFIC=0" --format="value(NAME)") --region us-central1
4. 排查CI/CD变量的影响
检查CI/CD流程中是否有变量注入到服务名称中,比如误将构建ID、分支名作为服务名的一部分,导致每次部署服务名不同。
内容的提问来源于stack exchange,提问作者Lonare
相关产品推荐
相关产品推荐

