在使用Jenkins在远程Tomcat8上部署时,您提供的用户名不允许使用基于文本的Tomcat Manager(错误403)

时间:2017-01-16 11:52:08

标签: maven tomcat jenkins web-deployment

我正在尝试使用Jenkins部署到容器插件在远程Tomcat(远程计算机)上部署WAR。 我在tomcat-users.xml中完成了以下配置

<user username="deployer" password="deployer" roles="manager-gui,manager-script,admin" />

我在Jenkins deployer容器插件中设置了正确的用户名密码和端口。该设置适用于本地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

请帮助。

7 个答案:

答案 0 :(得分:20)

这似乎是一个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>

这解决了这个问题。希望这有助于某人:)

答案 1 :(得分:5)

我在使用jenkins通过容器插件向tomcat部署工件时遇到了同样的问题, 解决方案: - 我在用户的角色中添加了manager-script和manager-gui,并提供对webapps / *目录的完全访问权限。它帮助我成功部署工件并能够使用manager-app查看它。

答案 2 :(得分:1)

如果没有任何作用,只需在tomcat-users.xml文件中创建一个分配了magnager-script角色的用户,并将该用户凭据设置为jenkins。

在tomcat-users.xml文件中

<tomcat-users>
<user  username="deployuser" password="deployuser" roles="manager-script" />
<user username="admin" password="admin" roles="manager-gui" />
</tomcat-users>

deploying to tomcat from jenkins

答案 3 :(得分:1)

您只需要在阀门上添加詹金斯IP地址即可。

您需要更新: /webapps/manager/META-INF/context.xml 。因为它只允许本地主机。如果知道特定的主机名或IP,则可以添加该主机名或IP地址,以XXX.XXX.XXX.XXX代替。 保持安全性非常重要。

<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|XXX.XXX.XXX.XXX" />
</Context>

之后,您需要重新启动tomcat。

$CATALINA_HOME/bin/shutdown.sh && $CATALINA_HOME/bin/startup.sh

答案 4 :(得分:0)

在Tomcat 9中,您不需要添加任何manager-XXX角色。您要做的就是添加用户并分配manager-gui(用于GUI访问)和manager-script(用于Jenkins部署之类的访问)。 另外,请确保编辑文件 /webapps/manager/META-INF/context.xml ,以注释掉Valve或为 allow 属性定义适当的正则表达式

答案 5 :(得分:0)

步骤1: 我们需要更新:\ webapps \ manager \ META-INF \ context.xml。 Bcs它只允许本地主机。如果您知道特定的主机名或IP,则可以添加。

<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>

第2步:

<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui, manager-script"/>

enter image description here

部署成功。

答案 6 :(得分:0)

我的操作系统:Debain 10

我通过编辑文件/opt/tomcat/conf/tomcat-users.xml解决了这个问题,并添加了manager-script角色

  <role rolename="admin-gui,manager-gui,manager-script,manager-jmx,manager-status,admin-gui"/>
  <user username="admin" password="password" roles="admin-gui,manager-gui,manager-script"/>
相关问题