使用window批处理实现一键拉取最新svn代码进行maven打包部署
使用场景:测试环境需要频繁部署的测试应用。
运行环境:
- Java 配置环境变量
- svn
- maven 需要配置环境变量
脚本思路:
- 拉取最新代码
- maven打包
- 进行备份
- 停止正在运行程序
- 将打包文件拷贝到运行目录
- 运行最新软件包
@echo off
setlocal enabledelayedexpansion
:: svn的url(必须修改)
set "SVN_REPO=http://gitee.com/"
:: svn的用户名(必须修改)
set "USERNAME=yhm"
:: svn的密码(必须修改)
set "PASSWORD=mima"
::打包后的jar包名称(必须修改)
set "APP_JAR=system-start.jar"
::打包文件路径(必须修改)
set "SOURCE_FILE=%WORKSPACE%\module-system\target\%APP_JAR%"
::服务端口号(必须修改)
set port=8080
::当前脚本路径
set BATPATH=%~dp0
::源码保存的路径
set "WORKSPACE=%BATPATH%aa-boot"
::文件夹备份目录
set "BACKUP_DIR=%BATPATH%backups"
:: 获取当前日期和时间,并格式化为 yyyyMMddHHmm
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "datetime=%%a"
set "year=!datetime:~0,4!"
set "month=!datetime:~4,2!"
set "day=!datetime:~6,2!"
set "hour=!datetime:~8,2!"
set "minute=!datetime:~10,2!"
:: 创建备份文件夹名称,精确到分钟
set "BACKUP_NAME=%BACKUP_DIR%\%year%%month%%day%_%hour%%minute%"
:: 1、更新代码
svn checkout "%SVN_REPO%" "%WORKSPACE%" --username %USERNAME% --password "%PASSWORD%"
echo SVN checkout failed.
pause
)
::2、 maven打包
:: cd "%WORKSPACE%"
:: call mvn clean package -Dmaven.test.skip=true
:: 3、备份运行中的程序
if not exist "%BACKUP_DIR%" mkdir "%BACKUP_DIR%"
if not exist "%BACKUP_NAME%" mkdir "%BACKUP_NAME%"
if exist "%SOURCE_FILE%" (
echo 开始备份文件......
xcopy /Y "%BATPATH%\%APP_JAR%" "%BACKUP_NAME%"
if %errorlevel% neq 0 (
echo 备份失败
) else (
echo 备份成功
)
) else (
echo 无需备份.
)
:: 4、停止正在运行的程序
for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do (
echo 停止程序 %%m
taskkill /pid %%m -t -f
)
:: 5、复制打包文件至工作目录
echo 将新打包的 %APP_JAR% 程序,移动至工作目录.
if exist "%SOURCE_FILE%" (
xcopy /Y "%SOURCE_FILE%" "%BATPATH%"
if %errorlevel% neq 0 (
echo 复制打包文件至工作目录失败
pause
) else (
echo 复制打包文件至工作目录成功
)
) else (
echo 新打包文件未找到,请确定.
pause
)
:: 6、运行
cd %BATPATH%
java -jar "%APP_JAR%"
pause