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

Jenkins部署Tomcat9 Java应用遇阻:自定义路径与WAR解压需求

解决Tomcat自定义docBase+Jenkins部署+Docker环境的问题

一、替换Jenkins Deploy to Container插件,用自定义部署脚本

插件的局限性无法适配你的场景,直接用Shell步骤或Pipeline命令实现灵活部署:

步骤1:Jenkins构建阶段解压WAR包

在Jenkins项目中添加构建步骤,解压生成的WAR文件到临时目录:

# 替换为你的WAR包实际路径和临时目录
mkdir -p /tmp/your-app-unpacked
unzip target/your-app.war -d /tmp/your-app-unpacked

步骤2:同步解压文件到Tomcat自定义docBase路径

由于你的Tomcat运行在Docker容器中,且docker-compose已挂载应用目录卷(比如宿主机/opt/tomcat-custom-docbase挂载到容器内/usr/local/tomcat/custom-app,即Context指定的docBase),直接同步文件到宿主机卷目录:

# 同步文件,--exclude用于保留外部配置文件不被覆盖,替换为你的实际配置文件名
rsync -av --exclude='external-config.properties' /tmp/your-app-unpacked/ /opt/tomcat-custom-docbase/

步骤3:重启Tomcat容器(按需)

如果Tomcat未配置自动热部署,重启容器生效:

# 替换为你的docker-compose服务名
docker-compose restart tomcat-service

二、确认Tomcat Context与Oracle连接池配置

确保server.xml中Context和连接池配置正确:

<Context docBase="/usr/local/tomcat/custom-app" path="/your-app" reloadable="true">
    <!-- Oracle数据库连接池配置 -->
    <Resource name="jdbc/OracleDB"
              auth="Container"
              type="javax.sql.DataSource"
              driverClassName="oracle.jdbc.OracleDriver"
              url="jdbc:oracle:thin:@//your-oracle-host:1521/ORCL"
              username="db-user"
              password="db-pass"
              maxTotal="100"
              maxIdle="20"
              minIdle="5"
              maxWaitMillis="10000"/>
</Context>

注意:需将Oracle JDBC驱动包(如ojdbc8.jar)放入Tomcat的lib目录,可通过Docker卷挂载驱动包到容器内/usr/local/tomcat/lib。

三、Jenkins Pipeline部署示例

如果使用Pipeline,完整部署阶段可参考:

stage('Deploy to Tomcat') {
    steps {
        script {
            // 解压WAR包
            sh 'mkdir -p /tmp/your-app-unpacked && unzip target/your-app.war -d /tmp/your-app-unpacked'
            // 同步到宿主机卷目录
            sh 'rsync -av --exclude=\'external-config.properties\' /tmp/your-app-unpacked/ /opt/tomcat-custom-docbase/'
            // 重启Tomcat容器
            sh 'cd /path/to/docker-compose-dir && docker-compose restart tomcat-service'
            // 清理临时目录
            sh 'rm -rf /tmp/your-app-unpacked'
        }
    }
}

四、关键注意事项

  • 给Jenkins用户授权:将Jenkins用户加入docker组,同时给宿主机卷目录设置合适权限(如chown -R jenkins:jenkins /opt/tomcat-custom-docbase)。
  • 热部署配置:若无需重启Tomcat,可在Context中设置reloadable="true",或通过Tomcat Manager API触发重载。
  • 外部配置读取:确保应用代码能正确读取卷目录下的外部配置文件(如通过系统属性、环境变量指定配置路径)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:57:45