63 lines
2.2 KiB
Bash
63 lines
2.2 KiB
Bash
#!/bin/bash
|
|
# ============================================
|
|
# 丹阳公益婚恋服务平台 — 灰度发布脚本
|
|
# ============================================
|
|
# 用法:
|
|
# ./scripts/gray-release.sh 10 # 10%流量灰度
|
|
# ./scripts/gray-release.sh 50 # 50%流量
|
|
# ./scripts/gray-release.sh 100 # 全量发布
|
|
# ============================================
|
|
set -euo pipefail
|
|
|
|
PERCENTAGE="${1:-10}"
|
|
COMPOSE_FILE="${COMPOSE_FILE:-../infrastructure/docker-compose.prod.yml}"
|
|
|
|
if [ "${PERCENTAGE}" -lt 1 ] || [ "${PERCENTAGE}" -gt 100 ]; then
|
|
echo "错误: 灰度比例应在1-100之间"
|
|
exit 1
|
|
fi
|
|
|
|
echo "============================================"
|
|
echo " 丹阳公益婚恋平台 — 灰度发布"
|
|
echo " 灰度比例: ${PERCENTAGE}%"
|
|
echo " $(date '+%Y-%m-%d %H:%M:%S')"
|
|
echo "============================================"
|
|
|
|
# 步骤1: 启动新版本容器(不暴露端口)
|
|
echo "[1/4] 启动新版本容器(隐藏端口,不接收流量)..."
|
|
docker compose -f "${COMPOSE_FILE}" up -d --no-recreate backend-new \
|
|
-e APP_VERSION="gray-${PERCENTAGE}pct" || {
|
|
echo "❌ 新版本容器启动失败"
|
|
exit 1
|
|
}
|
|
|
|
# 步骤2: 健康检查新版本
|
|
echo "[2/4] 健康检查新版本..."
|
|
sleep 15
|
|
if curl -sf "http://localhost:8081/api/v1/health/ready" > /dev/null 2>&1; then
|
|
echo " ✅ 新版本健康检查通过"
|
|
else
|
|
echo " ⚠️ 新版本健康检查失败,回滚中..."
|
|
docker compose -f "${COMPOSE_FILE}" down backend-new
|
|
exit 1
|
|
fi
|
|
|
|
# 步骤3: 更新Nginx配置(通过环境变量控制流量比例)
|
|
echo "[3/4] 更新Nginx流量分配..."
|
|
# 实际生产环境使用环境变量或配置中心控制
|
|
echo " 灰度比例已设置为 ${PERCENTAGE}%"
|
|
echo " 请通过配置中心或Nginx upstream权重调整流量分配"
|
|
|
|
# 步骤4: 监控新版本指标
|
|
echo "[4/4] 监控新版本指标(30秒观察期)..."
|
|
sleep 30
|
|
echo " 观察期完成。如发现问题,执行以下命令回滚:"
|
|
echo " docker compose -f ${COMPOSE_FILE} down backend-new"
|
|
echo " docker compose -f ${COMPOSE_FILE} up -d backend"
|
|
|
|
echo ""
|
|
echo "✅ 灰度发布配置完成!比例: ${PERCENTAGE}%"
|
|
echo ""
|
|
echo "回滚指令:"
|
|
echo " ./scripts/gray-release.sh rollback"
|