借助Cloud Build与Cloud Run实现带渐进式发布/告警回滚的复杂蓝绿部署
Cloud Run渐进式发布与自动告警回滚的GCP原生实现方案
你完全可以用GCP原生工具组合实现需求,不需要自行开发复杂应用,具体方案如下:
一、渐进式流量提升(逐日扩容至100%)
通过Cloud Build + Cloud Scheduler + Cloud Functions的组合实现自动化流量递增:
- 初始流量分配:在Cloud Build的绿色版本部署完成后,添加步骤执行
gcloud run services update-traffic分配初始小流量(比如5%),同时用gcloud run services describe --service=你的服务名 --format='value(status.traffic.latestRevision)'提取当前稳定版本(蓝色)的修订ID,将其存入Cloud Storage或Secret Manager备用。 - 定时流量递增:用Cloud Scheduler创建每日触发的定时任务,调用Cloud Functions。函数内实现逻辑:
- 调用
gcloud run services describe获取当前各版本的流量占比。 - 计算下一个递增比例(比如每日提升15%,直到达到100%)。
- 执行
gcloud run services update-traffic --service=你的服务名 --to-revisions=绿色版本ID=新比例,蓝色版本ID=剩余比例完成流量更新。 - 当绿色版本流量达到100%时,自动禁用或删除Cloud Scheduler的定时任务。
- 调用
二、基于监控告警的自动回滚
通过Cloud Monitoring + Cloud Functions实现异常触发回滚:
- 配置告警规则:在Cloud Monitoring中创建告警规则,可基于两类指标触发:
- 指标类:比如Cloud Run的请求错误率(>5%)、平均延迟(>2s)等核心服务指标。
- 日志类:从Cloud Logging中筛选特定错误日志(比如5xx错误、业务异常日志),设置出现次数阈值触发告警。
- 告警触发回滚:将告警的通知渠道设置为调用Cloud Functions,函数内实现回滚逻辑:
- 从Cloud Storage/Secret Manager中取出之前存储的蓝色版本修订ID。
- 执行
gcloud run services update-traffic --service=你的服务名 --to-revisions=蓝色版本ID=100%完成流量切回。 - 自动禁用Cloud Scheduler的渐进式流量提升任务,避免冲突。
三、权限与细节注意
- 确保Cloud Functions拥有Cloud Run服务的编辑权限、Cloud Storage/Secret Manager的读写权限;Cloud Scheduler拥有调用Cloud Functions的权限;Cloud Build拥有创建/更新Scheduler、存储修订ID的权限。
- 流量递增的比例和触发频率可根据业务需求调整,比如如果需要更精细的控制,可将Scheduler的触发频率改为每小时,同时调整每次递增的比例。
- 回滚函数中可添加额外逻辑,比如发送通知到团队沟通工具,告知运维团队回滚已触发。
内容的提问来源于stack exchange,提问作者Brian K
相关产品推荐
相关产品推荐

