You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Jenkins持久后台运行Spring Boot Web应用Jar包?

Jenkins Freestyle项目持久运行Spring Boot应用的解决方法

问题根源

Jenkins构建任务结束时,会终止所有由该任务创建的子进程(包括通过nohup ... &启动的后台Java进程)。添加sleep只是延迟了Jenkins的进程清理时间,并非真正解决问题。

可行解决方案

1. 完全脱离Jenkins的IO流关联

修改执行shell命令,将标准输出和错误输出重定向到/dev/null,切断进程与Jenkins的IO关联:

cd /opt/jenkins_WORKSHOP
nohup java -jar spring-boot-simple-web.jar > /dev/null 2>&1 &
  • > /dev/null:将标准输出丢弃到空设备
  • 2>&1:将错误输出重定向到标准输出,一并丢弃
    这样Jenkins无法捕获进程的IO资源,任务结束后不会终止该进程。

2. 使用disown脱离shell作业列表

在启动后台进程后,用disown将其从当前shell的作业列表中移除,避免shell退出时发送终止信号:

cd /opt/jenkins_WORKSHOP
nohup java -jar spring-boot-simple-web.jar &
disown

3. 用systemd管理应用(生产环境推荐)

通过systemd创建服务来管理Spring Boot应用,完全脱离Jenkins构建生命周期,还能实现自动重启等功能:

  1. 创建systemd服务文件/etc/systemd/system/spring-boot-app.service:
[Unit]
Description=Simple Spring Boot Web Application
After=network.target

[Service]
User=jenkins
WorkingDirectory=/opt/jenkins_WORKSHOP
ExecStart=/usr/bin/java -jar spring-boot-simple-web.jar
Restart=always  # 进程崩溃时自动重启

[Install]
WantedBy=multi-user.target
  1. 在Jenkins执行shell中执行命令更新并重启服务:
sudo systemctl daemon-reload
sudo systemctl restart spring-boot-app.service

注意事项

不要依赖sleep这类临时方案,它仅延迟了进程被清理的时间,无法实现持久运行。生产环境优先使用systemd管理服务,稳定性和可维护性更强。

内容的提问来源于stack exchange,提问作者Imranmadbar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 12:59:58