@echo off chcp 65001 >nul setlocal enabledelayedexpansion :: ================= Config ================= set "USER=dell" set "PASS=xd123456@.." set "IP=1.15.17.182" set "PORT=10000" set "JAR_FILE=target/ruoyi.jar" set "REMOTE_DIR=/home/service/dlsmlspro-product" set "SSH_OPTS=-o StrictHostKeyChecking=no -o ConnectTimeout=10" :: =========================================== echo ========================================== echo RuoYi Auto Deploy Script echo ========================================== echo. :: Get script directory set "SSHPASS_DIR=%~dp0bin" set "SSHPASS_EXE=%SSHPASS_DIR%\sshpass.exe" :: Check if local sshpass.exe already exists if exist "%SSHPASS_EXE%" ( set "PATH=%SSHPASS_DIR%;%PATH%" echo [OK] Found local sshpass: %SSHPASS_EXE% goto :check_jar ) :: Check if sshpass is available in system PATH where sshpass >nul 2>&1 if %errorlevel% equ 0 ( echo [OK] Found sshpass in system PATH goto :check_jar ) :: sshpass not found, try to install echo [WARN] sshpass not found, trying to install... echo. :: Check if running in Git Bash environment where bash >nul 2>&1 if %errorlevel% equ 0 ( echo [INFO] Git Bash detected, trying pacman install... bash -c "pacman -S --noconfirm sshpass" 2>nul if !errorlevel! equ 0 ( echo [OK] sshpass installed via pacman! goto :check_jar ) ) :: Download standalone sshpass echo [INFO] Downloading sshpass... if not exist "%SSHPASS_DIR%" mkdir "%SSHPASS_DIR%" :: Download using PowerShell powershell -NoProfile -Command "$url='https://github.com/xhcoding/sshpass-win32/releases/download/v1.0.3/sshpass.exe'; $out='%SSHPASS_EXE%'; Write-Host \"Downloading to: $out\"; try { Invoke-WebRequest -Uri $url -OutFile $out -UseBasicParsing; exit 0 } catch { Write-Host $_.Exception.Message; exit 1 }" if !errorlevel! neq 0 ( echo [ERROR] Failed to download sshpass! echo [HINT] Please install sshpass manually or use Git Bash: pacman -S sshpass goto :error_exit ) :: Add bin dir to PATH temporarily set "PATH=%SSHPASS_DIR%;%PATH%" echo [OK] sshpass downloaded to: %SSHPASS_DIR% echo [HINT] Consider adding %SSHPASS_DIR% to system PATH for permanent use echo. :check_jar :: Check if JAR file exists if not exist "%JAR_FILE%" ( echo [ERROR] JAR file not found: %JAR_FILE% goto :error_exit ) :: Display file size for %%F in ("%JAR_FILE%") do set "JAR_SIZE=%%~zF" set /a "JAR_SIZE_MB=JAR_SIZE/1024/1024" echo [INFO] JAR size: %JAR_SIZE_MB% MB echo [INFO] Target: %USER%@%IP%:%PORT% echo [INFO] Remote dir: %REMOTE_DIR% echo. :: Upload JAR file echo [STEP 1/2] Uploading %JAR_FILE%... sshpass -p "%PASS%" scp -P %PORT% %SSH_OPTS% "%JAR_FILE%" %USER%@%IP%:%REMOTE_DIR%/ if %errorlevel% neq 0 ( echo [ERROR] Upload failed! Check network or credentials. goto :error_exit ) echo [OK] Upload completed! echo. :: Execute remote deploy script echo [STEP 2/2] Running publish.sh... sshpass -p "%PASS%" ssh -p %PORT% %SSH_OPTS% %USER%@%IP% "cd '%REMOTE_DIR%' && chmod +x publish.sh && ./publish.sh" if %errorlevel% neq 0 ( echo [ERROR] publish.sh execution failed! goto :error_exit ) echo. echo ========================================== echo [SUCCESS] Deploy completed! echo ========================================== goto :end :error_exit echo. echo ========================================== echo [FAILED] Deploy failed! echo ========================================== :end pause