Jenkins部署Java项目(前后端分离)脚本;

Jenkins版本:2.346.3

Java:1.8

运行服务器:Windows Server 2022

此脚本不定时更新;

如果未搭建Jenkins环境可以参考如下文章:

https://blog.csdn.net/weixin_51304589/article/details/143951121?spm=1001.2014.3001.5501

需要学习如何使用可以参考如下文章:

https://blog.csdn.net/weixin_51304589/article/details/143950011?spm=1001.2014.3001.5502

一、后端脚本:使用前请仔细查看脚本是否有不对应的路径及项目名称等;

此脚本解决了上述第二片文章中所使用的脚本的一些问题:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值