Files
wecom_it_smart_desk/scripts/deploy/deploy_ai_source_identifier.py
T
Simon 7864ab404b feat(scripts): 收纳运维/部署/修复/调试脚本到 scripts/ 目录
**目录结构**:
- scripts/                 顶层运维/工具脚本(20 个)
- scripts/deploy/          一键部署脚本(deploy_*.py / upload_*.py / redeploy.py 等 8 个)
- scripts/fix/             一次性修复脚本(fix_*.py / fix_*.cypher / fix_*.sql 等 9 个)
- scripts/debug/           调试脚本集合(check_*.py/sql、test_*.py、debug_*.py 等 42 个)

**ops-tools/jms_ops.py**:jumpserver-ops skill 默认路径修复
- 从 'jumpserver-automation-shareable' 改为 'jumpserver-ops'
- 同步更新注释(优先 JP_SKILL_DIR 环境变量)

**典型脚本用途**:
- scripts/deploy-v1.2.ps1 / -staging.ps1:一键部署 v1.2 到生产 / staging
- scripts/init_quick_rules.sql:quick_rules 表初始数据
- scripts/gen_admin_token.py:生成 admin JWT token(调试用)
- scripts/build-and-verify.sh:v1.1 实施验证脚本
- scripts/verify_*.sh / .py:API/quick_rules 验证
- scripts/fix/*.py:环境修复(compose、env_key、itsm_bridge 等)

合计 81 文件 + 3317 行 / - 1 行
2026-08-03 18:48:02 +08:00

109 lines
3.3 KiB
Python

#!/usr/bin/env python3
"""
AI回复来源标识功能 - 前端部署脚本
同时部署 H5 和 Agent 前端
"""
import os
import sys
import time
import subprocess
import base64
# 读取 jms_ops 模块
sys.path.insert(0, r"C:\Users\simon\.workbuddy\skills\jumpserver-ops\scripts")
from jms_ops import PlinkSession, get_connection_tokens
def deploy_frontend(local_dir, remote_dir, name):
"""部署单个前端"""
print(f"\n📦 开始上传 {name} ...")
# 压缩本地 dist 目录
print(f" 压缩 {name} dist 目录...")
tar_file = f"/tmp/{name.lower()}-dist.tar.gz"
# 切换到 dist 的父目录,然后压缩 dist 目录
subprocess.run(f'cd "{local_dir}" && tar -czf {tar_file} .',
shell=True, check=True)
# 读取 tar 文件并进行 base64 编码
print(f" Base64 编码...")
with open(tar_file, 'rb') as f:
content = f.read()
b64_content = base64.b64encode(content).decode('ascii')
# 获取连接令牌
tokens = get_connection_tokens(1)
if not tokens:
print("❌ 获取 token 失败")
return False
token_id, token_secret = tokens[0]
# 创建会话并上传
session = PlinkSession(f"JMS-{token_id}", token_secret)
if not session.connect():
print("❌ 会话启动失败")
return False
# 先清空目标目录
print(f" 清空目标目录...")
session.run_command(f"rm -rf {remote_dir}/dist", timeout=30)
# 上传 base64 内容
print(f" 上传文件...")
chunk_size = 3800
for i in range(0, len(b64_content), chunk_size):
chunk = b64_content[i:i+chunk_size]
decode_cmd = f'echo "{chunk}" | base64 -d >> /tmp/{name.lower()}-dist-upload.tar.gz'
session.run_command(decode_cmd, timeout=30)
# 解压
print(f" 解压文件...")
session.run_command(f"cd /tmp && tar -xzf {name.lower()}-dist-upload.tar.gz -C {remote_dir}", timeout=60)
# 清理临时文件
session.run_command(f"rm -f /tmp/{name.lower()}-dist.tar.gz /tmp/{name.lower()}-dist-upload.tar.gz", timeout=30)
session.close()
print(f"{name} 部署完成!")
return True
def main():
print("=" * 50)
print("🚀 AI回复来源标识 - 前端部署")
print("=" * 50)
# H5 部署
h5_local = r"D:\资料\03-项目开发\wecom_it_smart_desk\frontend-h5\dist"
h5_remote = "/opt/wecom-it-desk/frontend-h5"
deploy_frontend(h5_local, h5_remote, "H5")
# Agent 部署
agent_local = r"D:\资料\03-项目开发\wecom_it_smart_desk\frontend-agent\dist"
agent_remote = "/opt/wecom-it-desk/frontend-agent"
deploy_frontend(agent_local, agent_remote, "Agent")
# 重启 nginx
print("\n" + "=" * 50)
print("🔄 重启 nginx...")
tokens = get_connection_tokens(1)
if not tokens:
print("❌ 获取 token 失败")
return
token_id, token_secret = tokens[0]
session = PlinkSession(f"JMS-{token_id}", token_secret)
if not session.connect():
print("❌ 会话启动失败")
return
session.run_command("cd /opt/wecom-it-desk && docker compose restart nginx", timeout=60)
session.close()
print("\n✅ 所有部署完成!")
print(" - H5: https://itportal.servyou.com.cn/h5/")
print(" - Agent: https://itportal.servyou.com.cn/itagent/")
if __name__ == "__main__":
main()