169 lines
6.6 KiB
YAML
169 lines
6.6 KiB
YAML
# ═══════════════════════════════════════════════
|
|
# 🔺 Sovereign: TCS-0002∞ | Root: SYS-GLW-0001
|
|
# 📜 Copyright: 国作登字-2026-A-00037559
|
|
# ═══════════════════════════════════════════════
|
|
# 🚀 GMP团队模块自动部署 · ZY-SVR-TEST-001 (新加坡 43.153.203.105)
|
|
#
|
|
# 触发条件: GMP相关PR合并到main后自动部署
|
|
# 目标服务器: ZY-SVR-TEST-001 · 43.153.203.105 · /opt/guanghu (统一标准)
|
|
# 部署方式: SSH → git pull → npm install → pm2 reload
|
|
#
|
|
# 涉及模块 (统一路径 guanghu-self-hosted/gmp-agent/):
|
|
# 培园: app.js / webhook.js / installer.js / uninstaller.js / lib/
|
|
# 译典: mcp-tools.js / manifest.yaml / health.js
|
|
# 录册: src/logger.js / src/test-runner.js / test/
|
|
#
|
|
# 端口规划 (ZY-SVR-TPL-2026-0426-001):
|
|
# 9800 - GMP-Agent 主端口
|
|
# 9801 - Webhook 端口 (预留 · 当前与9800同进程)
|
|
#
|
|
# 所需 GitHub Secrets (优先 ZY_TEST_* · 回退 ZY_NOVEL_* · 再回退默认值):
|
|
# ZY_TEST_KEY / ZY_NOVEL_KEY - SSH私钥
|
|
# ZY_TEST_HOST / ZY_NOVEL_HOST - 服务器IP (默认 43.153.203.105)
|
|
# ZY_TEST_USER / ZY_NOVEL_USER - SSH用户名 (默认 root)
|
|
# ZY_TEST_PATH / ZY_NOVEL_PATH - 仓库路径 (默认 /opt/guanghu)
|
|
# ═══════════════════════════════════════════════
|
|
|
|
name: '🚀 GMP模块自动部署 · ZY-SVR-TEST-001'
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
paths:
|
|
- 'guanghu-self-hosted/gmp-agent/**'
|
|
|
|
# 手动触发
|
|
workflow_dispatch:
|
|
inputs:
|
|
action:
|
|
description: '操作类型'
|
|
required: true
|
|
type: choice
|
|
options:
|
|
- deploy
|
|
- health-check-only
|
|
default: 'deploy'
|
|
|
|
concurrency:
|
|
group: gmp-deploy-zsvr-test-001
|
|
cancel-in-progress: false
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
deploy-gmp:
|
|
name: '🚀 部署GMP模块到ZY-SVR-TEST-001'
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: '📥 检出代码'
|
|
uses: actions/checkout@v4
|
|
|
|
- name: '🔐 配置SSH'
|
|
env:
|
|
# 优先 ZY_TEST_KEY (新规范), 回退 ZY_NOVEL_KEY (旧绑定)
|
|
SSH_KEY: ${{ secrets.ZY_TEST_KEY || secrets.ZY_NOVEL_KEY || secrets.ZY_SERVER_KEY }}
|
|
run: |
|
|
if [ -z "$SSH_KEY" ]; then
|
|
echo "❌ SSH密钥缺失: 请配置 ZY_TEST_KEY 或 ZY_NOVEL_KEY"
|
|
exit 1
|
|
fi
|
|
mkdir -p ~/.ssh
|
|
echo "$SSH_KEY" > ~/.ssh/zy_key
|
|
chmod 600 ~/.ssh/zy_key
|
|
|
|
# 验证密钥格式
|
|
if ! head -1 ~/.ssh/zy_key | grep -q "BEGIN"; then
|
|
echo "❌ SSH密钥格式异常"
|
|
exit 1
|
|
fi
|
|
|
|
SERVER_HOST="${{ secrets.ZY_TEST_HOST || secrets.ZY_NOVEL_HOST || secrets.ZY_SERVER_HOST || '43.153.203.105' }}"
|
|
ssh-keyscan -H "$SERVER_HOST" >> ~/.ssh/known_hosts 2>/dev/null
|
|
echo "✅ SSH配置完成 · 目标: $SERVER_HOST"
|
|
|
|
- name: '🚀 部署GMP模块'
|
|
env:
|
|
SERVER_HOST: ${{ secrets.ZY_TEST_HOST || secrets.ZY_NOVEL_HOST || secrets.ZY_SERVER_HOST }}
|
|
SERVER_USER: ${{ secrets.ZY_TEST_USER || secrets.ZY_NOVEL_USER || secrets.ZY_SERVER_USER }}
|
|
REPO_PATH: ${{ secrets.ZY_TEST_PATH || secrets.ZY_NOVEL_PATH || secrets.ZY_REPO_PATH }}
|
|
GMP_PORT: '9800'
|
|
run: |
|
|
HOST="${SERVER_HOST:-43.153.203.105}"
|
|
USER="${SERVER_USER:-root}"
|
|
REPO="${REPO_PATH:-/opt/guanghu}"
|
|
PORT="${GMP_PORT}"
|
|
|
|
echo "📦 部署GMP模块到 ZY-SVR-TEST-001 ($HOST)"
|
|
echo " 仓库路径: $REPO"
|
|
echo " GMP端口: $PORT"
|
|
|
|
ssh -i ~/.ssh/zy_key -o StrictHostKeyChecking=no "$USER@$HOST" \
|
|
"DEPLOY_REPO='$REPO' GMP_PORT='$PORT' bash -s" << 'REMOTE_CMD'
|
|
set -e
|
|
echo "📡 连接成功 · 开始部署GMP模块"
|
|
echo " REPO=$DEPLOY_REPO PORT=$GMP_PORT"
|
|
|
|
# 进入仓库目录
|
|
cd "$DEPLOY_REPO"
|
|
|
|
# 拉取最新代码
|
|
echo "🔄 git pull..."
|
|
git pull origin main 2>&1
|
|
|
|
# 部署 gmp-agent (培园+译典核心框架)
|
|
if [ -d "guanghu-self-hosted/gmp-agent" ]; then
|
|
echo "📦 安装gmp-agent依赖..."
|
|
cd guanghu-self-hosted/gmp-agent
|
|
npm install --production 2>&1 | tail -3
|
|
cd "$DEPLOY_REPO"
|
|
|
|
# 重启gmp-agent进程 (端口由 GMP_PORT 环境变量控制)
|
|
if pm2 describe gmp-agent > /dev/null 2>&1; then
|
|
echo "🔄 重启 gmp-agent..."
|
|
GMP_PORT="$GMP_PORT" pm2 reload gmp-agent --update-env 2>&1
|
|
else
|
|
echo "🆕 首次启动 gmp-agent..."
|
|
cd guanghu-self-hosted/gmp-agent
|
|
GMP_PORT="$GMP_PORT" pm2 start app.js --name gmp-agent --update-env 2>&1
|
|
cd "$DEPLOY_REPO"
|
|
fi
|
|
echo "✅ gmp-agent 部署完成"
|
|
fi
|
|
|
|
# 保存PM2配置
|
|
pm2 save 2>&1
|
|
|
|
# 健康检查
|
|
sleep 3
|
|
if curl -sf "http://127.0.0.1:${GMP_PORT}/health" > /dev/null 2>&1; then
|
|
echo "✅ GMP健康检查通过 · 端口${GMP_PORT}"
|
|
else
|
|
echo "⚠️ GMP健康检查未响应 (端口${GMP_PORT}) · 请手动确认"
|
|
fi
|
|
|
|
echo "🎉 GMP模块部署完成"
|
|
REMOTE_CMD
|
|
|
|
- name: '🧹 清理SSH密钥'
|
|
if: always()
|
|
run: rm -f ~/.ssh/zy_key
|
|
|
|
- name: '📊 输出部署摘要'
|
|
if: always()
|
|
run: |
|
|
echo "## 🚀 GMP模块部署摘要" >> $GITHUB_STEP_SUMMARY
|
|
echo "| 项目 | 内容 |" >> $GITHUB_STEP_SUMMARY
|
|
echo "|------|------|" >> $GITHUB_STEP_SUMMARY
|
|
echo "| 目标服务器 | ZY-SVR-TEST-001 · 43.153.203.105 (新加坡) |" >> $GITHUB_STEP_SUMMARY
|
|
echo "| 部署根目录 | /opt/guanghu (ZY-SVR-TPL-2026-0426-001 标准) |" >> $GITHUB_STEP_SUMMARY
|
|
echo "| GMP 端口 | 9800 |" >> $GITHUB_STEP_SUMMARY
|
|
echo "| 触发提交 | ${{ github.sha }} |" >> $GITHUB_STEP_SUMMARY
|
|
echo "| 触发分支 | ${{ github.ref_name }} |" >> $GITHUB_STEP_SUMMARY
|
|
echo "| 触发者 | ${{ github.actor }} |" >> $GITHUB_STEP_SUMMARY
|
|
echo "| 时间 | $(TZ=Asia/Shanghai date '+%Y-%m-%d %H:%M CST') |" >> $GITHUB_STEP_SUMMARY
|
|
echo "" >> $GITHUB_STEP_SUMMARY
|
|
echo "### 已部署模块" >> $GITHUB_STEP_SUMMARY
|
|
echo "- \`guanghu-self-hosted/gmp-agent/\` — 培园(核心框架) + 译典(MCP工具集+健康检查) + 录册(日志+测试模块)" >> $GITHUB_STEP_SUMMARY
|