@echo off setlocal EnableExtensions EnableDelayedExpansion REM ============================================================ REM Vue Frontend Deploy Script REM ============================================================ REM ========================= REM Configuration REM ========================= set "COMPANY=TEST" set "REMOTE_USER=root" set "REMOTE_HOST=36.213.90.123" set "REMOTE_PORT=65022" set "PASSWORD=Xdrjkj@10086#" set "ZIP_FILE=dist.zip" set "REMOTE_DIR=/data/project/mom/vue/test/dist" set "SSH_OPTS=-o StrictHostKeyChecking=no -o ConnectTimeout=10 -o ServerAliveInterval=15 -o ServerAliveCountMax=3" set "RETRY_COUNT=3" set "SSHPASS_DIR=%~dp0bin" REM ============================================================ REM Start REM ============================================================ echo. echo ============================================================ echo Vue Dist Auto Deploy echo ============================================================ echo. echo Company : %COMPANY% echo Server : %REMOTE_USER%@%REMOTE_HOST% echo Port : %REMOTE_PORT% echo Remote Dir : %REMOTE_DIR% echo Package : %ZIP_FILE% echo. REM ============================================================ REM Check sshpass REM ============================================================ echo [1/7] Checking sshpass... if exist "%SSHPASS_DIR%\sshpass.exe" ( set "PATH=%SSHPASS_DIR%;%PATH%" ) where sshpass >nul 2>&1 if not errorlevel 1 ( echo [OK] sshpass found. goto CHECK_PNPM ) echo [WARN] sshpass not found. if not exist "%SSHPASS_DIR%" ( mkdir "%SSHPASS_DIR%" >nul 2>&1 ) if exist "%SSHPASS_DIR%\sshpass.exe" ( set "PATH=%SSHPASS_DIR%;%PATH%" echo [OK] sshpass found. goto CHECK_PNPM ) echo [INFO] Downloading sshpass... powershell -NoProfile -ExecutionPolicy Bypass -Command "$url='https://github.com/xhcoding/sshpass-win32/releases/download/v1.0.3/sshpass.exe'; $out='%SSHPASS_DIR%\sshpass.exe'; Invoke-WebRequest -Uri $url -OutFile $out" if errorlevel 1 ( echo [ERROR] Failed to download sshpass. echo [ERROR] Please install sshpass manually. goto ERROR_EXIT ) set "PATH=%SSHPASS_DIR%;%PATH%" echo [OK] sshpass installed. REM ============================================================ REM Check pnpm REM ============================================================ :CHECK_PNPM echo. echo [2/7] Checking pnpm... where pnpm >nul 2>&1 if errorlevel 1 ( echo [ERROR] pnpm not found. echo [HINT] npm install -g pnpm goto ERROR_EXIT ) call pnpm --version if errorlevel 1 ( echo [ERROR] pnpm execution failed. goto ERROR_EXIT ) REM ============================================================ REM Check node REM ============================================================ echo. echo [3/7] Checking Node.js... where node >nul 2>&1 if errorlevel 1 ( echo [ERROR] Node.js not found. goto ERROR_EXIT ) call node --version if errorlevel 1 ( echo [ERROR] Node.js execution failed. goto ERROR_EXIT ) REM ============================================================ REM Check node_modules REM ============================================================ if not exist "node_modules" ( echo. echo [INFO] node_modules not found. echo [INFO] Running pnpm install... call pnpm install if errorlevel 1 ( echo [ERROR] pnpm install failed. goto ERROR_EXIT ) echo [OK] pnpm install completed. ) else ( echo [OK] node_modules exists. ) REM ============================================================ REM Build REM ============================================================ echo. echo [4/7] Building project... if exist "%ZIP_FILE%" ( echo. echo [WARN] %ZIP_FILE% already exists. set "REBUILD=" set /p "REBUILD=Rebuild? Y/N (default Y): " if /I "!REBUILD!"=="N" ( echo [INFO] Skip build. goto CHECK_ZIP ) ) echo [INFO] Company: %COMPANY% echo [INFO] Command: pnpm run build echo. set "VITE_COMPANY=%COMPANY%" call pnpm run build if errorlevel 1 ( echo. echo [ERROR] Build failed. goto ERROR_EXIT ) echo. echo [OK] Build completed. REM ============================================================ REM Check ZIP REM ============================================================ :CHECK_ZIP echo. echo [5/7] Checking package... if not exist "%ZIP_FILE%" ( echo [ERROR] %ZIP_FILE% not found. echo [HINT] Please check whether your build generates dist.zip. goto ERROR_EXIT ) for %%F in ("%ZIP_FILE%") do set "ZIP_BYTES=%%~zF" set /a ZIP_MB=ZIP_BYTES/1024/1024 echo [OK] Package found. echo [INFO] File size: !ZIP_BYTES! bytes echo [INFO] File size: !ZIP_MB! MB REM ============================================================ REM Set sshpass password REM ============================================================ set "SSHPASS=%PASSWORD%" REM ============================================================ REM Test SSH REM ============================================================ echo. echo [6/7] Testing SSH connection... sshpass -e ssh -p %REMOTE_PORT% %SSH_OPTS% %REMOTE_USER%@%REMOTE_HOST% "echo SSH_OK" if errorlevel 1 ( echo [ERROR] SSH connection failed. goto ERROR_EXIT ) echo [OK] SSH connection successful. REM ============================================================ REM Create remote directory REM ============================================================ echo. echo [INFO] Creating remote directory... sshpass -e ssh -p %REMOTE_PORT% %SSH_OPTS% %REMOTE_USER%@%REMOTE_HOST% "mkdir -p '%REMOTE_DIR%'" if errorlevel 1 ( echo [ERROR] Failed to create remote directory. goto ERROR_EXIT ) echo [OK] Remote directory ready. REM ============================================================ REM Upload temporary file REM ============================================================ echo. echo [INFO] Uploading package... set "REMOTE_TMP=%REMOTE_DIR%/.dist.zip.uploading" sshpass -e ssh -p %REMOTE_PORT% %SSH_OPTS% %REMOTE_USER%@%REMOTE_HOST% "rm -f '%REMOTE_TMP%'" sshpass -e scp -P %REMOTE_PORT% %SSH_OPTS% "%ZIP_FILE%" %REMOTE_USER%@%REMOTE_HOST%:"%REMOTE_TMP%" if errorlevel 1 ( echo [ERROR] Upload failed. goto ERROR_EXIT ) echo [OK] Upload completed. REM ============================================================ REM Check remote file REM ============================================================ echo. echo [INFO] Checking remote package... sshpass -e ssh -p %REMOTE_PORT% %SSH_OPTS% %REMOTE_USER%@%REMOTE_HOST% "test -f '%REMOTE_TMP%'" if errorlevel 1 ( echo [ERROR] Remote package does not exist. goto ERROR_EXIT ) echo [OK] Remote package exists. REM ============================================================ REM Compare file size REM ============================================================ echo. echo [INFO] Checking package size... sshpass -e ssh -p %REMOTE_PORT% %SSH_OPTS% %REMOTE_USER%@%REMOTE_HOST% "stat -c %%s '%REMOTE_TMP%'" echo. REM ============================================================ REM Rename temporary file REM ============================================================ echo [INFO] Activating package... sshpass -e ssh -p %REMOTE_PORT% %SSH_OPTS% %REMOTE_USER%@%REMOTE_HOST% "mv -f '%REMOTE_TMP%' '%REMOTE_DIR%/%ZIP_FILE%'" if errorlevel 1 ( echo [ERROR] Failed to activate package. goto ERROR_EXIT ) echo [OK] Package activated. REM ============================================================ REM Check unzip REM ============================================================ echo. echo [INFO] Checking unzip... sshpass -e ssh -p %REMOTE_PORT% %SSH_OPTS% %REMOTE_USER%@%REMOTE_HOST% "command -v unzip" if errorlevel 1 ( echo [ERROR] unzip is not installed on server. echo. echo CentOS/RHEL: echo yum install -y unzip echo. echo Ubuntu/Debian: echo apt install -y unzip goto ERROR_EXIT ) echo [OK] unzip found. REM ============================================================ REM Test ZIP REM ============================================================ echo. echo [INFO] Testing remote ZIP... sshpass -e ssh -p %REMOTE_PORT% %SSH_OPTS% %REMOTE_USER%@%REMOTE_HOST% "cd '%REMOTE_DIR%' && unzip -t '%ZIP_FILE%'" if errorlevel 1 ( echo. echo [ERROR] ZIP test failed. echo [INFO] Remote ZIP has been kept. goto ERROR_EXIT ) echo [OK] ZIP test passed. REM ============================================================ REM Extract REM ============================================================ echo. echo [INFO] Extracting package... sshpass -e ssh -p %REMOTE_PORT% %SSH_OPTS% %REMOTE_USER%@%REMOTE_HOST% "cd '%REMOTE_DIR%' && unzip -o '%ZIP_FILE%'" if errorlevel 1 ( echo. echo [ERROR] Remote unzip failed. echo [INFO] Remote ZIP has been kept. goto ERROR_EXIT ) echo. echo [OK] Extract completed. REM ============================================================ REM Remove ZIP REM ============================================================ echo. echo [INFO] Removing remote ZIP... sshpass -e ssh -p %REMOTE_PORT% %SSH_OPTS% %REMOTE_USER%@%REMOTE_HOST% "rm -f '%REMOTE_DIR%/%ZIP_FILE%'" if errorlevel 1 ( echo [WARN] Failed to remove remote ZIP. ) else ( echo [OK] Remote ZIP removed. ) REM ============================================================ REM Success REM ============================================================ echo. echo ============================================================ echo DEPLOY SUCCESS echo ============================================================ echo. echo Company : %COMPANY% echo Server : %REMOTE_HOST%:%REMOTE_PORT% echo Remote Dir : %REMOTE_DIR% echo Package : %ZIP_FILE% echo Size : !ZIP_MB! MB echo. echo Deployment completed successfully. echo. goto END REM ============================================================ REM Error REM ============================================================ :ERROR_EXIT echo. echo ============================================================ echo DEPLOY FAILED echo ============================================================ echo. echo Please check the error message above. echo. goto END REM ============================================================ REM End REM ============================================================ :END pause endlocal