READMESource: master@abf9c93a
🔀 dsh-test-sync
蓝绿部署同步插件:主实例安装插件时自动同步到测试实例并重启
✨ 为什么需要它?
在 DSH 双实例蓝绿部署场景下,每次在主实例(3081)安装新插件都需要手动同步到测试实例(3084),流程繁琐且容易遗漏。本插件实现了:
| 痛点 | 解决方案 |
|---|---|
| 手动同步 patch 文件易漏插件 | 自动监听主实例 cordis.patch.yml,检测到变更立即同步 |
| 测试实例重启需要手动操作 | 同步完成后自动触发测试实例重启,无需人工介入 |
| 多次频繁变更可能冲突 | 防抖机制(默认 3s),批量变更合并为一次同步 |
📦 安装方法
第一步:源码放入 node_modules_local
# 复制插件源码到主实例的 node_modules_local
cp -r /vol1/@appshare/DeepSeekHarness/workspace/dsh-test-sync-plugin \
/vol1/@appshare/DeepSeekHarness/profiles/web/node_modules_local/dsh-test-sync-plugin
第二步:添加依赖声明
编辑 /vol1/@appshare/DeepSeekHarness/profiles/web/package.json,在 dependencies 中添加:
"@deepseek-ai/dsh-test-sync": "file:./node_modules_local/dsh-test-sync-plugin"
第三步:注册到 cordis.patch.yml
编辑 /vol1/@appshare/DeepSeekHarness/.dsh/profiles/web/cordis.patch.yml,添加:
- id: test-sync
name: '@deepseek-ai/dsh-test-sync'
config:
testHome: '/vol1/@appshare/DeepSeekHarness/workspace/dsh-test-home'
proxyPort: 3084
enabled: true
debounceMs: 3000
第四步:重启主实例
# 官方重启(推荐,会话不中断)
cd /vol1/@appcenter/deepseek-harness
./dsh-restart.sh
🎛️ 配置说明
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
testHome |
string | .../dsh-test-home |
测试实例的 DSH_HOME 路径 |
proxyPort |
number | 3084 |
测试实例反代端口(健康检查用) |
enabled |
boolean | true |
是否启用自动同步 |
debounceMs |
number | 3000 |
同步防抖延迟(毫秒) |
🔌 API 说明
所有 API 通过主实例 3081 端口访问。
查询同步状态
curl -s http://10.10.10.4:3081/api/test-sync/status
{
"enabled": true,
"testHome": "/vol1/@appshare/DeepSeekHarness/workspace/dsh-test-home",
"proxyPort": 3084,
"lastSyncHash": "a1b2c3d4-e1f2-4a5b-8c9d-0e1f2a3b4c5d",
"health": {
"healthy": true,
"status": 200
}
}
手动触发同步
curl -s -X POST http://10.10.10.4:3081/api/test-sync/sync
{
"success": true,
"message": "同步完成"
}
启用同步
curl -s -X POST http://10.10.10.4:3081/api/test-sync/enable
{ "enabled": true }
禁用同步
curl -s -X POST http://10.10.10.4:3081/api/test-sync/disable
{ "enabled": false }
🧪 验证方法
验证插件加载成功
# 查看主实例日志,确认插件启动
grep "test-sync" /vol1/@appshare/DeepSeekHarness/.dsh/logs/main.log
预期输出:
test-sync: 启动蓝绿同步插件
test-sync: 测试实例 DSH_HOME=/vol1/@appshare/DeepSeekHarness/workspace/dsh-test-home
test-sync: 测试实例反代端口=3084
test-sync: API 路由已注册 (/api/test-sync/*)
test-sync: 开始监听 .../dsh-test-home/profiles/web/cordis.patch.yml
验证同步功能
# 1. 在主实例安装一个新插件(通过 GUI 或手动修改 cordis.patch.yml)
# 2. 等待 3 秒(防抖时间)
# 3. 检查测试实例是否同步
# 查询同步状态
curl -s http://10.10.10.4:3081/api/test-sync/status
# 查看测试实例 patch 文件
cat /vol1/@appshare/DeepSeekHarness/workspace/dsh-test-home/profiles/web/cordis.patch.yml
验证健康检查
# 测试实例是否存活
curl -s -o /dev/null -w "%{http_code}" http://10.10.10.4:3084/
预期输出:200
⚠️ 已知坑
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 测试实例未启动时同步失败 | health check 超时 | 先手动启动测试实例再同步 |
| 手动编辑测试实例 patch 后冲突 | 直接覆盖而非合并 | 同步前备份,或只通过 GUI 操作主实例 |
| 频繁变更导致多次重启 | debounceMs 设置过小 | 增大 debounceMs 到 5000+ |
📋 版本记录
| 版本 | 日期 | 说明 |
|---|---|---|
| 1.0.0 | 2026-01-01 | 初始版本:监听 patch 变更、自动同步、重启测试实例 |
工作原理:插件通过 chokidar 监听主实例 cordis.patch.yml 文件变更,检测到 bundles 列表变化后,自动计算 hash 对比、提取新增插件名称、写入测试实例 patch 文件,并触发测试实例重启。整个过程无需人工干预,实现蓝绿部署的无缝同步。
No comments yet. Be the first to write one.