Jenkins通过HTTPS部署WAR包至Tomcat失败问题求助
解决Jenkins Deploy to Container插件部署SSL启用后的Tomcat失败问题
我之前也碰到过一模一样的麻烦——Tomcat开启SSL后,Jenkins的Deploy to Container插件直接抛出SSL握手错误,关键这插件连个证书配置的入口都没有!给你几个亲测有效的解决思路:
方法1:让Jenkins的JVM信任Tomcat的SSL证书
SSL握手失败大概率是因为Jenkins运行的JVM不认可Tomcat的SSL证书,把证书导入Jenkins的信任库就能解决:
- 先导出Tomcat的SSL证书:
记得替换keytool -export -alias tomcat -file tomcat.cer -keystore /path/to/your/tomcat/keystore.jks/path/to/your/tomcat/keystore.jks为你Tomcat实际的密钥库路径,tomcat是创建证书时用的别名(如果不一样要对应修改)。 - 找到Jenkins使用的JVM的
cacerts信任文件,通常在$JAVA_HOME/jre/lib/security/cacerts(如果Jenkins用的是自带JVM,路径可能在Jenkins安装目录下的jre文件夹里)。然后导入证书:
默认的keytool -import -alias tomcat -file tomcat.cer -keystore /path/to/jenkins/jvm/cacertscacerts密码是changeit,按提示输入完成导入即可。 - 最后重启Jenkins服务,让新的信任配置生效。
方法2:保留Tomcat的HTTP管理端口(安全场景允许的话)
如果你的环境允许Tomcat保留8080端口用于内部部署(对外服务只用8443),这是最省心的方案:
- 打开Tomcat的
conf/server.xml,确保HTTP Connector的配置没有被注释:<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/> - 确认
conf/tomcat-users.xml里的部署用户拥有manager-script权限(这是Jenkins部署必须的角色):<user username="deployuser" password="yourpassword" roles="manager-script"/> - 回到Jenkins的Deploy to Container配置,依然使用原来的
http://hostname:8080作为Tomcat地址,这样就能绕开SSL的限制,对外服务依然保持https访问。
方法3:换用SSH脚本部署(摆脱插件限制)
如果上面两种方法都不适用,直接弃用Deploy to Container插件,用SSH插件手动部署反而更灵活可控:
- 先在Jenkins插件市场安装SSH插件。
- 在Jenkins的系统配置里添加你的Tomcat服务器SSH信息(IP、端口、用户名密码/密钥)。
- 在构建步骤里添加「Execute shell script on remote host using ssh」,脚本示例如下(根据你的Tomcat路径和启动方式调整):
这种方式完全不依赖插件的SSL支持,还能自定义部署的每一个步骤。# 停止Tomcat服务 sudo systemctl stop tomcat.service # 清理旧的应用文件 rm -rf /opt/tomcat/webapps/your-app.war /opt/tomcat/webapps/your-app # 上传新的WAR包(假设Jenkins构建后的WAR在${WORKSPACE}/target目录下) scp ${WORKSPACE}/target/your-app.war your-user@your-host:/opt/tomcat/webapps/ # 启动Tomcat服务 sudo systemctl start tomcat.service
内容的提问来源于stack exchange,提问作者adhithyan
相关产品推荐
相关产品推荐

