Jenkins版本:2.346.3
Java:1.8
运行服务器:Windows Server 2022
此脚本不定时更新;
如果未搭建Jenkins环境可以参考如下文章:
需要学习如何使用可以参考如下文章:
一、后端脚本:使用前请仔细查看脚本是否有不对应的路径及项目名称等;
此脚本解决了上述第二片文章中所使用的脚本的一些问题:
1.端口关闭问题;2.黑窗口无法关闭导致资源浪费;
@echo off
setlocal enabledelayedexpansion
:: 设置路径和端口号
set PORT=8080
set SOURCE_JAR=D:\Project\Project.jar
set TARGET_DIR=D:\Project
set TARGET_JAR=%TARGET_DIR%\Project.jar
set START_SCRIPT=%TARGET_DIR%\START_Project.bat
:: 确保目标目录存在
if not exist "%TARGET_DIR%" (
echo [INFO] 目标目录 %TARGET_DIR% 不存在,正在创建...
mkdir "%TARGET_DIR%"
if errorlevel 1 (
echo [ERROR] 无法创建目标目录 %TARGET_DIR%,请检查权限。
exit /b 1
)
)
:: 检查源文件是否存在
if not exist "%SOURCE_JAR%" (
echo [ERROR] 源文件 %SOURCE_JAR% 不存在,请检查路径。
exit /b 1
)
:: 复制 JAR 文件到目标目录
echo [INFO] 正在将 %SOURCE_JAR% 复制到 %TARGET_DIR%...
copy /y "%SOURCE_JAR%" "%TARGET_JAR%" >nul
if errorlevel 1 (
echo [ERROR] 无法复制 %SOURCE_JAR% 到 %TARGET_DIR%,请检查可能原因。
exit /b 1
)
:: 检查并关闭占用指定端口的服务和关联 DOM 窗口
echo [INFO] 检查端口 %PORT% 是否被占用...
set PID=
for /f "tokens=5" %%i in ('netstat -ano ^| findstr :%PORT%') do (
set PID=%%i
echo [INFO] 端口 %PORT% 被进程 PID=!PID! 占用,尝试关闭关联的 DOM 窗口...
:: 检查并关闭关联的 DOM 窗口
for /f "tokens=2 delims=," %%j in ('tasklist /FI "IMAGENAME eq cmd.exe" /FO CSV ^| findstr /i "PID=!PID!"') do (
echo [INFO] 发现与进程 PID=!PID! 关联的 DOM 窗口,PID=%%j。尝试关闭...
taskkill /PID %%j /F >nul 2>&1
if errorlevel 1 (
echo [WARNING] 无法关闭窗口 PID=%%j,可能已被关闭。
) else (
echo [INFO] 成功关闭窗口 PID=%%j。
)
)
:: 关闭服务进程
echo [INFO] 尝试结束进程 PID=!PID!...
set /a RETRY_COUNT=0
:RETRY_KILL
taskkill /PID !PID! /F >nul 2>&1
if errorlevel 1 (
set /a RETRY_COUNT+=1
if !RETRY_COUNT! lss 3 (
echo [WARNING] 第 !RETRY_COUNT! 次尝试结束进程 PID=!PID! 失败,重试中...
timeout /t 1 >nul
goto :RETRY_KILL
) else (
echo [ERROR] 无法结束进程 PID=!PID!,请手动检查。
exit /b 1
)
) else (
echo [INFO] 成功结束进程 PID=!PID!。
)
goto :END_PORT_CHECK
)
echo [INFO] 端口 %PORT% 未被占用。
:END_PORT_CHECK
:: 检查 START_MASTER.bat 是否存在
if exist "%START_SCRIPT%" (
echo [INFO] 启动脚本 %START_SCRIPT% 已存在,直接运行...
) else (
echo [INFO] 启动脚本 %START_SCRIPT% 不存在,正在创建...
(
echo @echo off
echo cd /d "%TARGET_DIR%"
echo start javaw -jar Project.jar
echo exit /b
) > "%START_SCRIPT%"
if errorlevel 1 (
echo [ERROR] 无法创建启动脚本 %START_SCRIPT%,请检查权限。
exit /b 1
)
echo [INFO] 启动脚本 %START_SCRIPT% 创建完成。
)
:: 在新窗口中运行启动脚本并断开与 Jenkins 的关系
echo [INFO] 正在启动 %TARGET_JAR%...
start "" cmd /c "%START_SCRIPT%"
:: 提示服务已启动
echo [INFO] 服务已启动到新窗口,请检查运行情况。
exit /b 0
二、前端脚本:使用前请仔细查看脚本是否有不对应的路径及项目名称等;
注意第一步与第四步中的项目地址及项目名称
此脚本解决了上述第二片文章中所使用的脚本的一些问题:
1.重启之后后台产生多个nginx服务,造成资源浪费;2.增加配置nginx配置文件检查;
@echo off
:: 第1步:进入项目目录
echo [INFO] 切换到项目目录:D:\Jenkins\workspace\project
cd /d "D:\Jenkins\workspace\project"
if %errorlevel% neq 0 (
echo [ERROR] 无法进入项目目录:D:\Jenkins\workspace\project
pause
exit /b
)
pause
@echo off
:: 第2步:安装依赖
echo [INFO] 正在安装项目依赖...
npm install --force
if %errorlevel% neq 0 (
echo [ERROR] 安装依赖失败!
pause
exit /b
)
echo [INFO] 依赖安装完成。
pause
@echo off
:: 第3步:构建项目
echo [INFO] 开始执行构建命令:npm run build:dev
npm run build:dev
if %errorlevel% neq 0 (
echo [ERROR] 构建失败!
pause
exit /b
)
echo [INFO] 项目构建完成。
pause
@echo off
:: 第4步:清理并将文件部署到 Nginx 目录
echo [INFO] 正在清理并复制文件到 Nginx 部署目录:D:\nginx-1.8.1\project
if exist "D:\nginx-1.8.1\project" (
rmdir /s /q "D:\nginx-1.8.1\project"
)
mkdir "D:\nginx-1.8.1\project"
xcopy /s /e /y /i "D:\Jenkins\workspace\project\dist\*" "D:\nginx-1.8.1\project"
if %errorlevel% neq 0 (
echo [ERROR] 文件复制失败!
pause
exit /b
)
echo [INFO] 文件复制完成。
pause
@echo off
:: 第5步:检查 Nginx 配置
echo [INFO] 检查 Nginx 配置文件是否正确...
cd /d "D:\nginx-1.8.1"
nginx -t
if %errorlevel% neq 0 (
echo [ERROR] Nginx 配置检查失败!
pause
exit /b
)
echo [INFO] Nginx 配置文件合法。
pause
@echo off
:: 第6步:重启 Nginx 服务
echo [INFO] 正在重启 Nginx 服务...
:: 强制停止所有 nginx.exe 进程
echo [INFO] 确保所有 Nginx 进程已停止...
taskkill /f /im nginx.exe
if %errorlevel% neq 0 (
echo [WARNING] 未找到 Nginx 进程或已成功停止。
) else (
echo [INFO] 成功停止所有 Nginx 进程。
)
:: 确保切换到正确的 Nginx 目录
cd /d "D:\nginx-1.8.1"
echo [INFO] 使用绝对路径启动 Nginx 服务:D:\nginx-1.8.1\nginx.exe
start "" "D:\nginx-1.8.1\nginx.exe"
if %errorlevel% neq 0 (
echo [ERROR] 启动 Nginx 服务失败!
pause
exit /b
)
echo [INFO] Nginx 服务重启完成。
pause