From 88f258a98555932502419abad9bc7d75a5d48281 Mon Sep 17 00:00:00 2001 From: xudan Date: Sat, 21 Jun 2025 11:08:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0Web-AMR=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E9=83=A8=E7=BD=B2=E8=84=9A=E6=9C=AC=EF=BC=8C=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E9=A1=B9=E7=9B=AE=E6=9E=84=E5=BB=BA=E5=92=8C=E5=A4=9A?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=99=A8=E9=83=A8=E7=BD=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 自动部署脚本.bat | 248 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 248 insertions(+) create mode 100644 自动部署脚本.bat diff --git a/自动部署脚本.bat b/自动部署脚本.bat new file mode 100644 index 0000000..8fee9d9 --- /dev/null +++ b/自动部署脚本.bat @@ -0,0 +1,248 @@ +@echo off +chcp 65001 > nul +title Web-AMR项目部署脚本 + +echo ==================== Web-AMR项目部署开始 ==================== + +:: 检查package.json是否存在 +if not exist "package.json" ( + echo [错误] 当前目录下未找到package.json文件,请确保在项目根目录下执行此脚本 + pause + exit /b 1 +) + +:: 询问是否需要打包 +:ask_build +echo. +echo [选择] 是否需要重新打包项目? +echo 1. 是,执行 npm run build +echo 2. 否,使用现有的 dist 文件夹 +echo. +set /p build_choice="请输入选择 (1/2): " + +if "%build_choice%"=="1" goto do_build +if "%build_choice%"=="2" goto check_dist +echo [错误] 请输入有效选择 (1 或 2) +goto ask_build + +:do_build +echo. +echo [步骤1] 开始构建项目... +echo 执行命令:npm run build +call npm run build + +if %errorlevel% neq 0 ( + echo [错误] 构建失败,退出部署 + pause + exit /b 1 +) +echo [成功] 项目构建完成 +goto choose_server + +:check_dist +:: 检查dist文件夹是否存在 +if not exist "dist" ( + echo [错误] 未找到dist文件夹,请选择重新打包 + goto ask_build +) +echo [信息] 使用现有的 dist 文件夹 + +:choose_server +:: 服务器配置 +set "server1_host=192.168.189.206" +set "server1_path=/var/www/web-map" +set "server1_user=vwedadmin" +set "server1_pass=Hangzhou@123456" +set "server1_name=生产服务器206" +set "server1_use_key=true" + +set "server2_host=192.168.189.187" +set "server2_path=/var/www/web-map" +set "server2_user=ma" +set "server2_pass=N26BxdUxkM" +set "server2_name=测试服务器187" +set "server2_use_key=false" + +set "server3_host=192.168.189.80" +set "server3_path=/var/www/web-map" +set "server3_user=ma" +set "server3_pass=2213@Aiit" +set "server3_name=开发服务器80" +set "server3_use_key=true" + +:: 选择部署方式 +:ask_deploy_mode +echo. +echo [选择] 请选择部署方式: +echo 1. 单个部署 - %server1_name% (%server1_host%) +echo 2. 单个部署 - %server2_name% (%server2_host%) +echo 3. 单个部署 - %server3_name% (%server3_host%) +echo 4. 批量部署 - 部署到所有服务器 +echo 5. 自定义批量部署 +echo. +set /p deploy_choice="请输入选择 (1-5): " + +if "%deploy_choice%"=="1" ( + set deploy_servers=1 + goto start_deploy +) +if "%deploy_choice%"=="2" ( + set deploy_servers=2 + goto start_deploy +) +if "%deploy_choice%"=="3" ( + set deploy_servers=3 + goto start_deploy +) +if "%deploy_choice%"=="4" ( + set deploy_servers=1,2,3 + goto start_deploy +) +if "%deploy_choice%"=="5" goto custom_deploy +echo [错误] 请输入有效选择 (1-5) +goto ask_deploy_mode + +:custom_deploy +echo. +echo [自定义批量部署] 请选择要部署的服务器(多选用逗号分隔,如:1,3) +echo 1. %server1_name% (%server1_host%) +echo 2. %server2_name% (%server2_host%) +echo 3. %server3_name% (%server3_host%) +echo. +set /p deploy_servers="请输入服务器编号: " +goto start_deploy + +:start_deploy +:: 检查scp命令是否可用 +where scp >nul 2>&1 +if %errorlevel% neq 0 ( + echo [错误] 未找到scp命令,请安装OpenSSH客户端 + echo Windows 10用户可以通过以下方式安装: + echo 设置 -^> 应用 -^> 可选功能 -^> 添加功能 -^> OpenSSH客户端 + pause + exit /b 1 +) + +:: 创建临时压缩包 +echo. +echo [信息] 正在创建临时压缩包... +powershell -Command "Compress-Archive -Path 'dist\*' -DestinationPath 'dist_temp.zip' -Force" + +if %errorlevel% neq 0 ( + echo [错误] 创建压缩包失败 + pause + exit /b 1 +) +echo [成功] 临时压缩包创建完成 + +:: 部署到选定的服务器 +set success_count=0 +set total_count=0 + +for %%s in (%deploy_servers%) do ( + set /a total_count+=1 + call :deploy_to_server %%s + if !errorlevel! equ 0 ( + set /a success_count+=1 + ) +) + +:: 清理本地临时文件 +if exist "dist_temp.zip" del dist_temp.zip +echo [成功] 本地临时文件清理完成 + +echo. +echo ==================== 部署结果汇总 ==================== +echo 总计部署服务器数:%total_count% +echo 成功部署数:%success_count% +if %success_count% equ %total_count% ( + echo [成功] 所有服务器部署完成! + echo. + echo [访问提示] Web-AMR项目部署路径:/var/www/web-map + echo 请确认nginx或apache配置指向正确的路径 +) else ( + echo [警告] 部分服务器部署失败,请检查错误信息 +) +echo. +echo 脚本执行完成! +pause +exit /b 0 + +:: 部署到指定服务器的函数 +:deploy_to_server +setlocal enabledelayedexpansion +set server_num=%1 + +if "%server_num%"=="1" ( + set current_host=!server1_host! + set current_path=!server1_path! + set current_user=!server1_user! + set current_pass=!server1_pass! + set current_name=!server1_name! + set current_use_key=!server1_use_key! +) else if "%server_num%"=="2" ( + set current_host=!server2_host! + set current_path=!server2_path! + set current_user=!server2_user! + set current_pass=!server2_pass! + set current_name=!server2_name! + set current_use_key=!server2_use_key! +) else if "%server_num%"=="3" ( + set current_host=!server3_host! + set current_path=!server3_path! + set current_user=!server3_user! + set current_pass=!server3_pass! + set current_name=!server3_name! + set current_use_key=!server3_use_key! +) else ( + echo [错误] 无效的服务器编号:%server_num% + exit /b 1 +) + +echo. +echo [部署] 开始部署到 !current_name! (!current_host!)... +echo 目标路径:!current_path! +echo 用户名:!current_user! + +:: 根据认证方式设置命令前缀 +if "!current_use_key!"=="true" ( + set scp_cmd=scp -o StrictHostKeyChecking=no + set ssh_cmd=ssh -o StrictHostKeyChecking=no + echo [信息] 使用SSH密钥认证(免密登录) +) else ( + :: 检查是否有sshpass工具 + where sshpass >nul 2>&1 + if !errorlevel! equ 0 ( + set scp_cmd=sshpass -p "!current_pass!" scp -o StrictHostKeyChecking=no + set ssh_cmd=sshpass -p "!current_pass!" ssh -o StrictHostKeyChecking=no + echo [信息] 使用sshpass自动输入密码 + ) else ( + set scp_cmd=scp -o StrictHostKeyChecking=no + set ssh_cmd=ssh -o StrictHostKeyChecking=no + echo [提示] 如果提示输入密码,请输入:!current_pass! + echo [建议] 安装sshpass工具可以实现自动输入密码 + ) +) + +:: 上传文件到远程服务器 +echo [信息] 正在上传文件... +!scp_cmd! dist_temp.zip !current_user!@!current_host!:/tmp/ + +if !errorlevel! neq 0 ( + echo [错误] 文件上传到 !current_name! 失败 + exit /b 1 +) + +echo [成功] 文件上传到 !current_name! 完成 + +:: 在远程服务器上解压并部署 +echo [信息] 正在远程服务器上解压部署... +!ssh_cmd! !current_user!@!current_host! "mkdir -p !current_path! && rm -r !current_path!/* 2>/dev/null || true && cd !current_path! && unzip -o /tmp/dist_temp.zip && rm /tmp/dist_temp.zip && echo 'Web-AMR项目部署完成,文件列表:' && ls -la !current_path! || echo '文件列表显示失败,但部署成功'" + +if !errorlevel! neq 0 ( + echo [错误] !current_name! 远程部署失败 + exit /b 1 +) + +echo [成功] !current_name! Web-AMR项目部署完成! +exit /b 0 \ No newline at end of file