欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 使用Jenkins部署SpringBoot项目

使用Jenkins部署SpringBoot项目

2025/5/24 3:53:16 来源:https://blog.csdn.net/yuanchengmm/article/details/148086778  浏览:    关键词:使用Jenkins部署SpringBoot项目

1. 手动部署应用

使用Jenkins部署项目前,先手动部署 这样Jenkins只负责部署流程,具体每个应用的动态参数可以在 start.sh 脚本中设置
在这里插入图片描述
start.sh

#!/bin/bashnohup java -Dfile.encoding=utf-8 -Dspring.profiles.active=dev  -Xms2g -Xmx4g -jar  `pwd`/commuter-auth.jar  > out.log  2>&1 &echo $! > pid

stop.sh

或者使用 kill -15 优雅停机

kill -9 `cat pid`

2. 在 Jenkins 新建一个项目

前置条件安装Maven Integration 插件
在这里插入图片描述

3. 设置项目git仓库地址和用户密码

在这里插入图片描述

4. maven设置

在这里插入图片描述

clean package -Dmaven.test.skip=true

在这里插入图片描述

4. Post Steps

在这里插入图片描述
单应用执行脚本

#!/bin/bash# 应用名称
app=commuter-auth
# 应用部署目录
path=/home/app/commuter/commuter-dev/auth
# 应用打包后的目录
target=commuter-auth/targetecho "切换目录至${path}"
cd $path || { echo "无法切换目录到 $path"; exit 1; }
echo "当前目录: $(pwd)"
ls -lecho "停止${app}服务..."
./stop.sh
stop_exit_code=$?
echo "停止脚本退出状态码: $stop_exit_code"echo "替换${app}.jar文件..."
mv -v ${WORKSPACE}/${target}/$app.jar $path || { echo "移动Jar文件失败"; exit 1; }
ls -l $app.jarecho "Java版本:"
java -version || { echo "Java未找到"; exit 1; }echo "等待5秒..."
sleep 5echo "开始启动${app}服务..."
# 防止Jenkins杀死进程
export BUILD_ID=dontKillMe  
./start.sh
echo "启动命令执行状态: $?"echo "等待10秒,检查进程是否启动..."
sleep 10# 根据进程名检查实际是否运行
pid=$(pgrep -f "$path/$app.jar")
if [ -z "$pid" ]; thenecho "错误: $app 进程未启动!"echo "输出日志内容:"tail -n 100 $path/out.logexit 1
elseecho "$app 进程ID: $pid"
fiecho "$app 部署成功"

多模块应用执行脚本

#!/bin/bash# 定义多组部署参数 (app名称 部署目录 target目录)
# "应用名称 部署相对路径 打包target路径"
declare -a deployments=(  "commuter-gateway gateway commuter-gateway/target""commuter-auth auth commuter-auth/target""commuter-bus-server bus-server commuter-bus/commuter-bus-server/target""commuter-bus-uniview bus-uniview commuter-bus/commuter-bus-uniview/target""commuter-standard-jt808 standard-808 commuter-standard/commuter-standard-jt808/target""commuter-standard-annex standard-annex commuter-standard/commuter-standard-annex/target""commuter-standard-data standard-data commuter-standard/commuter-standard-data/target""commuter-standard-peripheral standard-peripheral commuter-standard/commuter-standard-peripheral/target""commuter-standard-server standard-server commuter-standard/commuter-standard-server/target""commuter-quartz quartz commuter-visual/commuter-quartz/target"
)# 定义部署函数
deploy_app() {local app="$1"local deploy_path="/home/app/commuter/commuter-dev/$2"local target="$3"echo "开始部署应用: $app"echo "应用目录: $deploy_path"echo "目标路径: $target"echo "切换目录至 ${deploy_path}"if ! cd "$deploy_path"; thenecho "无法切换目录到 ${deploy_path}"return 1fiecho "当前目录: $(pwd)"ls -lecho "停止 ${app} 服务..."./stop.shlocal stop_exit_code=$?echo "停止脚本退出状态码: $stop_exit_code"echo "替换 ${app}.jar 文件..."if ! mv -v "${WORKSPACE}/${target}/${app}.jar" "$deploy_path"; thenecho "移动Jar文件失败"return 1fils -l "${app}.jar"echo "Java版本:"if ! java -version; thenecho "Java未找到"return 1fiecho "等待5秒..."sleep 5echo "开始启动 ${app} 服务..."export BUILD_ID=dontKillMe./start.shlocal start_status=$?echo "启动命令执行状态: $start_status"echo "等待10秒,检查进程是否启动..."sleep 10local pidpid=$(pgrep -f "${deploy_path}/${app}.jar")if [ -z "$pid" ]; thenecho "错误: ${app} 进程未启动!"echo "输出日志内容:"tail -n 100 "$deploy_path/out.log"return 1elseecho "${app} 进程ID: $pid"fiecho "${app} 部署成功"return 0
}# 循环执行部署
for deployment in "${deployments[@]}"; doIFS=' ' read -r app deploy_path target <<< "$deployment"echo "================================"echo "开始处理部署任务: $app"deploy_app "$app" "$deploy_path" "$target"# 检查部署结果if [ $? -eq 0 ]; thenecho "[$app] 部署成功!"elseecho "[$app] 部署失败!"fiecho "等待10秒进入下一个部署..."sleep 10
doneecho "所有部署任务处理完成!"

5. 常见问题

5.1 jenkins没有操作项目目录的权限

解决办法,设置Jenkins执行用户为root (不太安全,比较偷懒的做法)

修改 Jenkins 系统服务配置

vi /usr/lib/systemd/system/jenkins.service

修改下面配置

User=root
Group=root

重新加载系统服务并重新启动 Jenkins

systemctl daemon-reload
systemctl restart jenkins

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词