diff --git a/deploy/scripts/deploy-blue-green-service.sh b/deploy/scripts/deploy-blue-green-service.sh index e309175ae..24c60f2a3 100644 --- a/deploy/scripts/deploy-blue-green-service.sh +++ b/deploy/scripts/deploy-blue-green-service.sh @@ -96,7 +96,7 @@ else fi if [ "$target_slot" = "blue" ]; then - target_port="$BASE_PORT" + target_port=$((BASE_PORT + 20000)) else target_port=$((BASE_PORT + 10000)) fi @@ -242,12 +242,11 @@ switch_gateway_proxy() { return 1 fi done + route_root="${BLUE_GREEN_ROUTE_CONFIG_ROOT:-/www/server/panel/vhost/nginx}" if [ "$SERVICE" = "gateway" ]; then - config="$(env_value GATEWAY_BLUE_GREEN_NGINX_CONFIG)" - config="${config:-/www/server/panel/vhost/nginx/api-cn.buggoglobal.com.conf}" + config="$route_root/00-blue-green-gateway.conf" else - config="$(env_value GATEWAY_OVERSEAS_BLUE_GREEN_NGINX_CONFIG)" - config="${config:-/www/server/panel/vhost/nginx/api-global.buggoglobal.com.conf}" + config="$route_root/00-blue-green-gateway-overseas.conf" fi if [ -z "$config" ] || [ ! -f "$config" ]; then echo "$SERVICE 蓝绿切换要求环境文件配置有效的 Nginx 配置路径" >&2 @@ -285,12 +284,11 @@ reload_frontend_proxies() { rollback_gateway_proxy() { [ "$SERVICE" = "gateway" ] || [ "$SERVICE" = "gateway-overseas" ] || return 0 [ "$DEPLOY_ENV" = production ] || return 0 + route_root="${BLUE_GREEN_ROUTE_CONFIG_ROOT:-/www/server/panel/vhost/nginx}" if [ "$SERVICE" = "gateway" ]; then - config="$(env_value GATEWAY_BLUE_GREEN_NGINX_CONFIG)" - config="${config:-/www/server/panel/vhost/nginx/api-cn.buggoglobal.com.conf}" + config="$route_root/00-blue-green-gateway.conf" else - config="$(env_value GATEWAY_OVERSEAS_BLUE_GREEN_NGINX_CONFIG)" - config="${config:-/www/server/panel/vhost/nginx/api-global.buggoglobal.com.conf}" + config="$route_root/00-blue-green-gateway-overseas.conf" fi old_port="${active_port:-$BASE_PORT}" sed -i "s#127\.0\.0\.1:$target_port#127.0.0.1:$old_port#g" "$config" diff --git a/scripts/blue-green-deployment-contract.test.mjs b/scripts/blue-green-deployment-contract.test.mjs index 7b45d7975..cfc60686d 100644 --- a/scripts/blue-green-deployment-contract.test.mjs +++ b/scripts/blue-green-deployment-contract.test.mjs @@ -14,6 +14,7 @@ test('all backend business services have blue-green runtime contracts', async () ]) assert.match(script, new RegExp(`${service.replaceAll('-', '\\-')}:`)) assert.match(script, /target_slot="green"/) + assert.match(script, /target_port=\$\(\(BASE_PORT \+ 20000\)\)/) assert.match(script, /target_port=\$\(\(BASE_PORT \+ 10000\)\)/) assert.match(script, /compose run -d --no-deps --name "\$candidate"/) assert.match(script, /wait_for_container "\$candidate"/) @@ -43,8 +44,9 @@ test('candidate failure keeps the active container and successful cutover stops test('gateway cutover is atomic and restores nginx config on validation failure', async () => { const script = await read('deploy/scripts/deploy-blue-green-service.sh') - assert.match(script, /api-cn\.buggoglobal\.com\.conf/) - assert.match(script, /api-global\.buggoglobal\.com\.conf/) + assert.match(script, /00-blue-green-gateway\.conf/) + assert.match(script, /00-blue-green-gateway-overseas\.conf/) + assert.doesNotMatch(script, /api-cn\.buggoglobal\.com\.conf|api-global\.buggoglobal\.com\.conf/) assert.match(script, /尚未完成首次蓝绿迁移,拒绝切换 Gateway/) assert.match(script, /frontend-\$frontend_service\.active/) assert.match(script, /尚未使用稳定上游 \$required_alias,拒绝切换 Gateway/)