Files
wecom_it_smart_desk/deploy-server/build-package.ps1
T
Simon 364e688382 chore(release): v0.5.0-beta 发版准备
主要改动:

backend 业务:
- feat(error-codes): 统一错误码表 E1011/E1012 拆码
  - E1011 AUTH_PASSWORD_WRONG: 本地密码错误
  - E1012 AUTH_FIRST_LOGIN_PASSWORD_REQUIRED: 首次登录请先设置密码
  - E1015 AUTH_OLD_PASSWORD_REQUIRED: 改密需要旧密码
  - E1016 AUTH_OLD_PASSWORD_WRONG: 旧密码错误
- fix(agents): P0 降级放行时,如坐席已注册但未设密码,正确 raise 1012
  (修复前会撞 1011 本地密码错误,与场景不符)
- feat(approval): 审批模块 (T审批/A审批)
- feat(config): approval_template_resource / approval_template_device 配置
- feat(main): /ready, /metrics, /version 端点(K8s 友好)

backend 测试:
- test(agents): 新增 test_agents.py — 3 个 Fix-4 降级登录测试
  - 错误密码拒绝
  - 缺密码拒绝
  - 正确密码通过
  pytest tests/test_agents.py → 3/3 通过
- test(conftest): 模块级 mock + slowapi 限流重置 + UTF-8 patch
  解决 Windows pytest GBK 读 .env 失败 + 降级路径无法测试

仓库治理:
- chore(gitignore): 排除 .workbuddy/memory/(workbuddy 本地记忆)
- chore(docs): 重命名两份 IT 文档(前缀加智能区分版本)

部署与文档:
- docs: RELEASE_NOTES_v0.5.0-beta.md / dashboard.html / 需求-发版预览页面
- docs: 部署、架构、PRD、安全、评审报告等同步 v0.5.0-beta
- deploy-server: 打包脚本、nginx、docker-compose 版本号 bump

前端 (frontend-h5 / frontend-agent / frontend-admin / frontend-portal):
- index.html / package.json 版本号与构建号 bump

自动验收(RELEASE_NOTES L100-104):
- [x] pytest tests/test_agents.py -v → 3 passed
- [x] grep Bs7ucT backend frontend-h5 frontend-agent → 无输出
- [x] grep AppException(101[123]) backend → 仅 1 处(登录场景 1012)
- [ ] npm run build (frontend-h5 / frontend-agent) → 合并后跑

后续: 合并 feature/t-1-t4-merge → main,tag v0.5.0-beta
2026-06-15 14:14:58 +08:00

112 lines
4.4 KiB
PowerShell
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================================
# 企微智能IT支持服务台 — 打包部署脚本
# =============================================================================
# 功能:将所有部署所需文件打包成一个 zip 文件
# 用法:在 PowerShell 中运行此脚本
# 输出:it-smart-desk-server-deploy.zip
# =============================================================================
$ErrorActionPreference = "Stop"
# 获取项目根目录(脚本所在目录的父目录的父目录)
$projectRoot = $PSScriptRoot
# 如果在 deploy-server 子目录运行,向上一级
if ($projectRoot -match "deploy-server") {
$projectRoot = Split-Path -Parent $projectRoot
}
$deployDir = "$projectRoot\deploy-server"
$packageDir = "$deployDir\_package"
$zipFile = "$deployDir\it-smart-desk-server-deploy.zip"
Write-Host "========================================" -ForegroundColor Cyan
Write-Host " 企微智能IT支持服务台 — 打包部署文件" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host ""
# 清理旧的打包目录
if (Test-Path $packageDir) {
Remove-Item $packageDir -Recurse -Force
Write-Host "[1/7] 清理旧打包目录... done" -ForegroundColor Gray
} else {
Write-Host "[1/7] 创建打包目录..." -ForegroundColor Gray
}
New-Item -ItemType Directory -Path $packageDir -Force | Out-Null
# 复制 docker-compose.yml
Write-Host "[2/7] 复制 docker-compose.yml..." -ForegroundColor Yellow
Copy-Item "$deployDir\docker-compose.yml" "$packageDir\docker-compose.yml"
# 复制 .env(含真实配置)
Write-Host "[3/7] 复制 .env(含真实配置)..." -ForegroundColor Yellow
Copy-Item "$deployDir\.env" "$packageDir\.env"
# 复制 nginx 配置
Write-Host "[4/7] 复制 nginx 配置..." -ForegroundColor Yellow
New-Item -ItemType Directory -Path "$packageDir\nginx" -Force | Out-Null
Copy-Item "$deployDir\nginx.conf" "$packageDir\nginx\nginx.conf"
# 复制后端代码
Write-Host "[5/7] 复制后端代码(含 Dockerfile..." -ForegroundColor Yellow
$backendSrc = "$projectRoot\backend"
$backendDst = "$packageDir\backend"
New-Item -ItemType Directory -Path $backendDst -Force | Out-Null
# 复制后端核心文件(排除 __pycache__、.pyc、.db 等)
$backendFiles = @(
"Dockerfile",
"requirements.txt",
"alembic.ini",
"alembic",
"app"
)
foreach ($item in $backendFiles) {
$src = "$backendSrc\$item"
if (Test-Path $src) {
if ((Get-Item $src).PSIsContainer) {
# 复制目录,排除 __pycache__ 和 .pyc
robocopy $src "$backendDst\$item" /E /XD __pycache__ /XF *.pyc *.db /NFL /NDL /NJH /NJS /NC /NS /NP | Out-Null
} else {
Copy-Item $src "$backendDst\$item"
}
}
}
# 复制前端构建产物
Write-Host "[6/7] 复制前端构建产物..." -ForegroundColor Yellow
@("frontend-h5", "frontend-agent", "frontend-admin") | ForEach-Object {
$src = "$projectRoot\$_\dist"
$dst = "$packageDir\$_\dist"
if (Test-Path $src) {
robocopy $src $dst /E /NFL /NDL /NJH /NJS /NC /NS /NP | Out-Null
$count = (Get-ChildItem $dst -Recurse -File).Count
Write-Host " $_ : $count files" -ForegroundColor Gray
} else {
Write-Host " $_ : WARNING - dist not found!" -ForegroundColor Red
}
}
# 打包成 zip
Write-Host "[7/7] 打包成 zip..." -ForegroundColor Yellow
if (Test-Path $zipFile) {
Remove-Item $zipFile -Force
}
Compress-Archive -Path "$packageDir\*" -DestinationPath $zipFile -CompressionLevel Optimal
# 清理临时目录
Remove-Item $packageDir -Recurse -Force
# 输出结果
$zipSize = [math]::Round((Get-Item $zipFile).Length / 1MB, 2)
Write-Host ""
Write-Host "========================================" -ForegroundColor Green
Write-Host " 打包完成!" -ForegroundColor Green
Write-Host "========================================" -ForegroundColor Green
Write-Host " 文件:$zipFile" -ForegroundColor White
Write-Host " 大小:${zipSize} MB" -ForegroundColor White
Write-Host ""
Write-Host "下一步:" -ForegroundColor Cyan
Write-Host " 1. 上传 zip 到服务器 /opt/wecom-it-desk/" -ForegroundColor White
Write-Host " 2. 解压:unzip it-smart-desk-server-deploy.zip" -ForegroundColor White
Write-Host " 3. 启动:docker compose up -d --build" -ForegroundColor White
Write-Host " 4. 参考 DEPLOY-GUIDE.md 查看详细步骤" -ForegroundColor White