@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
|