使用windows批处理触发时Jenkins显示执行成功,关闭端口并删除jar包的批处理文件执行了,但是执行jar包的批处理实际未触发。
关闭端口并删除jar包的批处理
我删除的目录在C:\Users\Administrator\bhzn-admin\target\*
@echo off
setlocal enabledelayedexpansion
set "PORT=8045"
set "LOG_FILE=C:\Users\Administrator\Desktop\bat\logs\stopjar.log"
set "CONTINUE_PROCESSING=true"
:CHECK_PORT_USAGE
echo Checking port usage at %DATE% %TIME% >> "%LOG_FILE%"
for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":!PORT! "') do (
set "PROC_PID=%%m"
if defined PROC_PID (
echo Process with PID !PROC_PID! is still using port !PORT! at %DATE% %TIME% >> "%LOG_FILE%"
taskkill /F /PID !PROC_PID! 2>&1 >> "%LOG_FILE%"
set "CONTINUE_PROCESSING=true"
goto CHECK_PORT_USAGE
)
)
:DELETE_FILES
echo Attempting to delete files from C:\Users\Administrator\bhzn-admin\target at %DATE% %TIME% >> "%LOG_FILE%"
del /F /S /Q "C:\Users\Administrator\bhzn-admin\target\*" 2>>&1 >> "%LOG_FILE%"
if !errorlevel! neq 0 (
echo Failed to delete all files from target folder at %DATE% %TIME%, Error code: !errorlevel! >> "%LOG_FILE%"
set "CONTINUE_PROCESSING=true"
goto DELETE_FILES
) else (
echo Successfully deleted all files from target folder at %DATE% %TIME% >> "%LOG_FILE%"
set "CONTINUE_PROCESSING=false"
)
:VERIFY_CLEANUP
if "!CONTINUE_PROCESSING!"=="false" (
echo Cleanup completed at %DATE% %TIME% >> "%LOG_FILE%"
goto END
) else (
echo Waiting for cleanup to complete... >> "%LOG_FILE%"
timeout /T 5 /NOBREAK > nul
goto CHECK_PORT_USAGE
)
:END
echo End of script at %DATE% %TIME% >> "%LOG_FILE%"
endlocal
exit
执行jar包的批处理
这是其中一个最简单的,试了很多方法都无效
@echo off
start javaw -jar -Xms256m -Xmx512m "C:\Users\Administrator\bhzn-admin\target\BH-ZHLK.jar" > "C:\Users\Administrator\bhzn-admin\logs\application.log" 2>&1
exit 0
解决方案一
我决定不使用批处理直接发送启动命令,可实现启动操作,但是由于是发送命令,Jar会一直执行,从而导致Jenkins显示,命令执行超时警告。
启动命令
javaw -jar -Xms256m -Xmx512m "C:\Users\Administrator\bhzn-admin\target\BH-ZHLK.jar" > "C:\Users\Administrator\bhzn-admin\logs\application.log" 2>&1
解决方案二
既然发送启动命令不行,那我们直接在执行的服务器加入一个批处理检查,每20秒检查一次,如果进程不存在则,重新启动
@echo off
set "jarPath=C:\Users\Administrator\bhzn-admin\target\BH-ZHLK.jar"
set "logFilePath=C:\Users\Administrator\bhzn-admin\logs\application.log"
:START_CHECK
set "Ymd=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%"
tasklist /NH /FI "IMAGENAME eq javaw.exe" | findstr /I "BH-ZHLK.jar" > nul || goto STARTPRO
ping -n 10 127.0.0.1 > nul
goto START_CHECK
:STARTPRO
@echo %Ymd% Starting %jarPath% process...
if exist "%jarPath%" (
start "BH-ZHLK Daemon" /B javaw -jar -Xms256m -Xmx512m "%jarPath%" > "%logFilePath%" 2>&1
)
ping -n 20 127.0.0.1 > nul
goto START_CHECK