Files
danyang-match/infrastructure/scripts/gray-release.sh
T

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"