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

Tomcat无法部署Web应用最新版本,Jenkins自动部署报错求助

我之前踩过一模一样的坑!手动删旧包部署完全正常,一用Jenkins自动部署就报错,折腾了好几天才解决,给你梳理几个最可能的原因和对应的解决办法:

Jenkins自动部署Tomcat报错的排查与解决

1. Tomcat进程未彻底终止,导致文件被锁定

手动操作时你大概率会等Tomcat完全停稳再删文件,但Jenkins脚本里可能刚执行shutdown.sh就立刻去删旧包——这时候Tomcat的JVM进程或者后台线程还没完全退出,旧的war包或解压后的目录被系统锁定,自然删不动、部署失败。

  • 解决办法:
    • 在Jenkins的部署脚本里,执行shutdown.sh后加一段等待时间,比如:
      /path/to/tomcat/bin/shutdown.sh
      sleep 15  # 时长根据你的服务启动/停止速度调整
      
    • 或者强制检查并杀死Tomcat相关进程(注意别误杀其他服务):
      ps aux | grep tomcat | grep -v grep | awk '{print $2}' | xargs kill -9
      
    • 也可以修改Tomcat的server.xml,给对应的Context节点加上antiResourceLocking="true",减少文件锁定的概率:
      <Context path="/your-app" docBase="/path/to/your-app" antiResourceLocking="true"/>
      

2. Jenkins运行用户的权限不足

手动操作你用的是自己的账号(大概率有Tomcat目录的读写权限),但Jenkins服务默认是用jenkins系统用户运行的,这个用户可能没权限删除webapps下的旧文件,甚至没权限重启Tomcat。

  • 解决办法:
    • 把jenkins用户加入到Tomcat所属的用户组:
      usermod -aG tomcat jenkins
      
    • 检查并调整Tomcat关键目录的权限,确保jenkins用户有读写执行权限:
      chown -R tomcat:tomcat /path/to/tomcat/webapps
      chmod -R 755 /path/to/tomcat/webapps
      

3. 部署插件的配置逻辑有问题

如果你用的是Jenkins的Tomcat Deployer插件或者类似的部署插件,可能插件的“卸载旧版本”逻辑没处理好——比如它试图操作的路径不对,或者没先停Tomcat就直接替换文件。

  • 解决办法:
    • 检查插件配置里的Deploy Path是否和Tomcat实际的webapps目录完全一致
    • 开启插件的“Stop Tomcat before deployment”选项(如果有这个功能的话),或者在插件执行前手动添加停止Tomcat的步骤
    • 实在不行就放弃插件,改用纯Shell脚本部署,流程更可控:
      # 1. 停止Tomcat
      /path/to/tomcat/bin/shutdown.sh
      sleep 15
      # 2. 删除旧版本文件
      rm -rf /path/to/tomcat/webapps/your-app*
      # 3. 清理缓存和临时文件
      rm -rf /path/to/tomcat/work/Catalina/localhost/your-app
      rm -rf /path/to/tomcat/temp/*
      # 4. 上传新war包到webapps目录
      cp /path/to/jenkins/workspace/your-app/target/your-app.war /path/to/tomcat/webapps/
      # 5. 启动Tomcat
      /path/to/tomcat/bin/startup.sh
      

4. 旧版本的缓存文件残留

手动删除时你可能顺便清了Tomcat的work和temp目录,但Jenkins脚本里只删了webapps下的文件,残留的缓存文件和新版本的代码冲突,导致部署后报错。

  • 解决办法:
    • 在部署脚本里添加清理缓存的步骤,就是上面纯Shell脚本里的那两行rm -rf命令,确保每次部署都清空旧的缓存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:19:39