我正在尝试使用Jenkins部署到容器插件在远程Tomcat(远程计算机)上部署WAR。我在tomcat-users.xml中完成了以下配置
<user username="deployer" password="deployer" roles="manager-gui,manager-script,admin" />
我在Jenkins部署程序容器插件中设置了正确的用户名密码和端口。该设置对于本地Tomcat运行正常。但是对于远程Tomcat,我一直收到以下错误:
Caused by: org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: The username you provided is not allowed to use the text-based Tomcat Manager (error 403) at org.codehaus.cargo.container.tomcat.internal.TomcatManager.invoke(TomcatManager.java:555)
at org.codehaus.cargo.container.tomcat.internal.TomcatManager.list(TomcatManager.java:686) at org.codehaus.cargo.container.tomcat.internal.TomcatManager.getStatus(TomcatManager.java:699) at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:174)
... 16 more Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: http://1.203.190.5:8080/manager/text/list at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown
Source) at org.codehaus.cargo.container.tomcat.internal.TomcatManager.invoke(TomcatManager.java:544) ... 19 more
请帮忙。
这似乎是一个詹金斯(Jenkins)错误,但我通过在Tomcat中设置以下配置解决了这个问题:
编辑文件/webapps/manager/META-INF/context.xml:
以前:
<Context antiResourceLocking="false" privileged="true">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
</Context>
更改此文件以注释值:
<Context antiResourceLocking="false" privileged="true">
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
</Context>
这解决了问题。希望这可以帮助某人:)
Jenkins没有错误。默认情况下,Tomcat不允许从外部计算机(例如,本地主机)访问管理器。这只是禁用该限制。谢谢您的帮助。
我得到jenkins-host> curl tomcat-host:8090 / manager / text / list -u部署者输入用户'deployer'的主机密码:密码OK-列出的虚拟主机应用程序[localhost] /:running:0:ROOT / manager :running:0:manager,但“通过jenkins deploy插件仅使用相同的用户名,但不允许“您提供的用户名使用基于文本的Tomcat管理器(错误403)”。如何通过詹金斯获得200 OK?检查:当密码或用户名错误时,我从curl得到401而不是403。
就我而言,问题是我没有在Tomcat URL字段中提供端口号。我没有输入主机名,而是输入了主机名:8080,它运行良好。