chore(deploy): 新增 bioflow_switch_restart.sh 切分支→重启→验证规范脚本

This commit is contained in:
2026-10-13 10:28:06 +08:00
parent 75eb489fc3
commit 1ecc4cb29e
+91
View File
@@ -0,0 +1,91 @@
#!/bin/bash
# deploy/bioflow_switch_restart.sh —— 切分支后重启生信相关服务并验证
#
# 背景:QA(8091)/前端(5180)/bioflow_service(8098) 都是「启动时刻」快照,
# 切分支后不重启就会跑旧分支的代码/配置(曾导致「设置面板无生信开关」+
# 「规划降级」两个问题)。本脚本把「切分支→重启→验证」固化,避免再踩。
#
# 用法:bash deploy/bioflow_switch_restart.sh [分支名]
# 分支名缺省 feature/bioflow-skill-orchestration
#
# 重启:QA(8091) + bioflow_service(8098) + 前端 vite(5180)
# BFF(8090) 不重启:/api/capabilities 每次请求动态拉 QA registry,QA 重启后自动生效
# 验证:服务健康 + QA registry 生信能力 + 前端 SettingsPanel 生信三开关
#
# 关键点(勿删):
# - QA 需 source agent/qa/env/prod.env + 强制 QA_V1_ENABLE_BIOFLOW_AGENT=1(熔断开)
# - 8098 裸启动即可:main.py 已内置 load_dotenv,自动加载 bioflow_service/.env
# - 前端 pkill 用「zh/PlantAI-rag-new/ui/」精确匹配,避免误杀 5181(wjq 仓库) 的 vite
set -uo pipefail
ROOT="/home/xzq/5090/teamWorkspace/zh/PlantAI-rag-new"
VENV="/home/xzq/5090/teamWorkspace/zh/plantai-rag-new-venv/bin/python"
BRANCH="${1:-feature/bioflow-skill-orchestration}"
PASS=0; FAIL=0
ok() { PASS=$((PASS+1)); echo " ✅ $1"; }
bad() { FAIL=$((FAIL+1)); echo " ❌ $1"; }
echo "======== 1. 切分支 ========"
cd "$ROOT" || { echo "仓库目录不存在: $ROOT"; exit 1; }
git checkout "$BRANCH" || { echo "切分支失败: $BRANCH"; exit 1; }
echo "当前分支: $(git branch --show-current)"
echo ""
echo "======== 2. 重启 QA (8091) ========"
pkill -f "scripts.qa_v1_1_73_server" 2>/dev/null; sleep 2
cd "$ROOT/agent/qa"
set -a; source env/prod.env; set +a
export QA_V1_ENABLE_BIOFLOW_AGENT=1 # 生信对话熔断开关,切生信分支必须开
nohup "$VENV" -m uvicorn scripts.qa_v1_1_73_server:app --host 127.0.0.1 --port 8091 \
> /tmp/plantai-qa-8091.log 2>&1 < /dev/null &
disown
echo ""
echo "======== 3. 重启 bioflow_service (8098) ========"
pkill -f "app.main:app.*port 8098" 2>/dev/null; sleep 2
cd "$ROOT/bioflow_service"
nohup "$VENV" -m uvicorn app.main:app --host 127.0.0.1 --port 8098 \
> /tmp/plantai-bioflow-8098.log 2>&1 < /dev/null &
disown
echo ""
echo "======== 4. 重启前端 vite (5180) ========"
pkill -f "zh/PlantAI-rag-new/ui/node_modules/.bin/vite" 2>/dev/null; sleep 2
cd "$ROOT/ui"
VITE_BFF_TARGET="http://127.0.0.1:8090" setsid npm run dev \
> /tmp/plantai-vite.log 2>&1 < /dev/null &
disown
echo ""
echo "等待服务启动 (12s)..."
sleep 12
echo ""
echo "======== 5. 验证 ========"
echo "[健康检查]"
c=$(curl -s -m 3 -o /dev/null -w "%{http_code}" http://127.0.0.1:8098/docs 2>/dev/null)
[ "$c" = "200" ] && ok "8098 bioflow_service /docs=$c" || bad "8098 bioflow_service /docs=$c(见 /tmp/plantai-bioflow-8098.log)"
c=$(curl -s -m 3 -o /dev/null -w "%{http_code}" http://127.0.0.1:8091/api/v1/qa-v1-1-73/capabilities/registry 2>/dev/null)
[ "$c" = "200" ] && ok "8091 QA registry=$c" || bad "8091 QA registry=$c(见 /tmp/plantai-qa-8091.log)"
c=$(curl -s -m 3 -o /dev/null -w "%{http_code}" http://127.0.0.1:5180/ 2>/dev/null)
[ "$c" = "200" ] && ok "5180 前端 =$c" || bad "5180 前端 =$c(见 /tmp/plantai-vite.log)"
echo "[生信能力注册]"
REG=$(curl -s -m 5 http://127.0.0.1:8091/api/v1/qa-v1-1-73/capabilities/registry 2>/dev/null)
BIO=$(echo "$REG" | grep -o '"name":"bioflow-[a-z-]*"' | wc -l)
[ "$BIO" -ge 3 ] && ok "QA registry 生信能力 $BIO 个(期望 3)" || bad "QA registry 生信能力仅 $BIO 个(期望 3)"
echo "[前端生信三开关]"
SW=$(curl -s -m 5 -H "Accept: */*" "http://127.0.0.1:5180/src/components/settings/SettingsPanel.vue" 2>/dev/null | grep -c "settingsBioflow\|bioflowCaps")
[ "$SW" -ge 2 ] && ok "前端 SettingsPanel 含「生信分析能力」三开关" || bad "前端 SettingsPanel 无生信三开关(可能旧代码,需硬刷新浏览器)"
echo ""
echo "======== 结果: $PASS 通过 / $FAIL 失败 ========"
if [ "$FAIL" -eq 0 ]; then
echo "✅ 全部就绪。浏览器请 Ctrl+Shift+R 硬刷新(清缓存),再测生信对话。"
else
echo "❌ 有失败项,请查看 /tmp/plantai-qa-8091.log /tmp/plantai-bioflow-8098.log /tmp/plantai-vite.log"
fi
exit "$FAIL"