咨询:gcloud停止App Engine当前版本方法及脚本自动启停方案
嘿,我来帮你搞定这两个App Engine运维的实用场景问题:
一、停止当前承载100%流量版本的推荐方法
官方最推荐的方式就是使用gcloud app versions stop命令,但要避免手动查版本号的麻烦,核心是利用gcloud的过滤+格式化输出能力,自动定位到承载全部流量的版本,完全不用去控制台翻找。
二、Bash脚本自动启停的实现方案
下面给你两个现成的脚本,分别对应你的两个需求,你可以直接用或者根据自己的服务配置调整:
1. 自动停止承载100%流量的版本
这个脚本会自动定位目标服务(默认是default服务,可按需修改)里承载全部流量的版本,然后执行停止操作:
#!/bin/bash # 配置你的App Engine服务名,默认是default SERVICE_NAME="default" # 提取承载100%流量的版本ID TRAFFIC_VERSION=$(gcloud app versions list --service="$SERVICE_NAME" --filter="traffic_split=1.0" --format='value(id)') if [ -n "$TRAFFIC_VERSION" ]; then echo "✅ 找到承载100%流量的版本: $TRAFFIC_VERSION,开始停止..." gcloud app versions stop "$TRAFFIC_VERSION" --service="$SERVICE_NAME" echo "✅ 版本$TRAFFIC_VERSION已成功停止" else echo "❌ 未找到承载100%流量的版本,请检查服务配置" exit 1 fi
关键细节:
--filter="traffic_split=1.0":精准过滤出流量占比100%的版本--format='value(id)':只输出版本ID,方便直接作为参数传入停止命令- 如果你的App Engine有多个服务,修改
SERVICE_NAME变量即可适配
2. 自动启动最近部署的版本
这个脚本会按部署时间倒序排序,找到最新部署的版本并启动,还可选自动把流量切换到该版本:
#!/bin/bash # 配置你的App Engine服务名 SERVICE_NAME="default" # 提取最新部署的版本ID(按创建时间倒序,取第一个) LATEST_VERSION=$(gcloud app versions list --service="$SERVICE_NAME" --sort-by="~createTime" --limit=1 --format='value(id)') if [ -n "$LATEST_VERSION" ]; then echo "✅ 找到最近部署的版本: $LATEST_VERSION,开始启动..." gcloud app versions start "$LATEST_VERSION" --service="$SERVICE_NAME" # 可选:如果需要把100%流量切到这个新版本,取消下面两行的注释 # echo "✅ 正在将流量切换到版本$LATEST_VERSION..." # gcloud app services set-traffic "$SERVICE_NAME" --splits="$LATEST_VERSION=1.0" echo "✅ 版本$LATEST_VERSION已成功启动" else echo "❌ 未找到任何已部署的版本,请检查服务状态" exit 1 fi
关键细节:
--sort-by="~createTime":~表示倒序排列,最新部署的版本会排在最前面--limit=1:只取第一个结果,也就是最新的版本- 若需要启动后直接让新版本接管全部流量,取消
set-traffic命令的注释即可
额外注意事项
- 运行脚本前,确保已经通过
gcloud auth login完成身份验证,并且用gcloud config set project YOUR_PROJECT_ID设置了正确的项目 - 如果你需要同时操作多个服务,可以把服务名改成脚本参数,比如
./start-latest.sh my-service,然后在脚本里用SERVICE_NAME=$1获取输入值 - 担心误操作的话,可以在停止版本前加个确认步骤,比如
read -p "确定要停止版本$TRAFFIC_VERSION吗?(y/N) " CONFIRM,确认后再执行停止命令
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

