如何在不使用插件的前提下从Jenkins将war包部署到Tomcat
跨服务器Jenkins部署War包到Tomcat(无Deploy to container插件方案)
下面提供两种经过验证的可行方案,都可以保证部署后应用正常访问:
方案1:使用Tomcat自带Manager REST API部署
你要找的部署接口是Tomcat默认自带的Manager后台API,不需要额外安装组件,仅需要做简单的权限配置:
- 第一步配置Tomcat端访问权限:编辑Tomcat根目录下
conf/tomcat-users.xml,添加接口调用权限的角色和账号,示例配置:
<role rolename="*manager-script*"/> <user username="deployer" password="自定义密码" roles="manager-script"/>
manager-script是专门给API调用使用的角色,不要分配网页端管理的manager-gui权限,安全性更高。
- 第二步配置IP白名单:编辑
conf/Catalina/localhost/manager.xml(不存在就新建文件),只允许Jenkins服务器IP调用接口:
<Context privileged="true" antiResourceLocking="false" docBase="${catalina.home}/webapps/manager"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="Jenkins服务器的IP地址" /> </Context>
修改完成后重启Tomcat生效。
- 第三步在Jenkins配置部署命令:在构建后步骤中添加「执行shell」,用curl调用部署接口即可:
curl -u deployer:自定义密码 -T 构建生成的war包本地路径.war "http://Tomcat服务器IP:端口/manager/text/deploy?path=/应用访问路径&update=true"
其中update=true参数代表如果已经部署过同路径应用会直接覆盖更新,不需要先手动卸载旧版本。 - 部署结果校验:调用完接口后可以追加健康检查命令,验证应用是否启动成功:
curl -s -o /dev/null -w "%{http_code}" http://Tomcat服务器IP:端口/应用访问路径,返回200即代表部署正常。
方案2:直接复制War包到Tomcat webapps目录
这个方案不需要开启Tomcat Manager接口,操作更简单,适合对安全要求更高的场景:
首先明确规则:只要Tomcat开启了自动部署(默认就是开启状态),把war包放到webapps目录下,Tomcat会自动解压加载应用,不需要手动执行启动操作;如果是更新旧版本应用,需要先清理旧文件避免部署冲突。
操作步骤:
- 提前配置Jenkins服务器到Tomcat服务器的SSH免密登录,保证Jenkins运行用户可以直接访问Tomcat服务器不需要输入密码。
- 在Jenkins构建后步骤添加「执行shell」,按顺序执行以下操作:
- (可选,小应用更新可以跳过)先停止Tomcat,避免文件传输过程中出现读写冲突:
ssh Tomcat服务器登录用户@TomcatIP "sh /Tomcat根目录/bin/shutdown.sh" - 清理旧应用的残留文件,避免旧版本文件影响新包运行:
ssh Tomcat服务器登录用户@TomcatIP "rm -rf /Tomcat根目录/webapps/应用名 /Tomcat根目录/webapps/应用名.war" - 传输新构建的war包到Tomcat的webapps目录:
scp 本地构建好的war包路径.war Tomcat服务器登录用户@TomcatIP:/Tomcat根目录/webapps/应用名.war - (如果之前执行了停止Tomcat的操作才需要执行)启动Tomcat:
ssh Tomcat服务器登录用户@TomcatIP "sh /Tomcat根目录/bin/startup.sh"
- (可选,小应用更新可以跳过)先停止Tomcat,避免文件传输过程中出现读写冲突:
- 结果校验:如果没有手动启停Tomcat,传完包后等待30秒到2分钟(等待时间根据应用大小调整),再调用应用的健康检查接口确认返回正常即可。
通用注意事项
- 用自动部署方式的话,先确认Tomcat
conf/server.xml中Host节点的*autoDeploy*属性为true、*unpackWARs*属性为true,这两个配置默认都是开启的,没有手动修改过不需要调整。 - 跨服务器传输文件如果网络不稳定,可以把scp替换成rsync,加上断点续传参数可靠性更高。
- 部署失败的话可以查看Tomcat
logs/catalina.out日志排查问题,常见报错原因是权限不足、端口占用、应用依赖缺失。
内容的提问来源于stack exchange,提问作者Toni26
相关产品推荐
相关产品推荐

