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

The username you provided is not allowed to use the text-based Tomcat Manager (error 403) when deploying on remote Tomcat8 using Jenkins

我正在尝试使用 Jenkins 部署到容器插件在远程 Tomcat(远程计算机)上部署 WAR。 我在tomcat-users.xml

做了如下配置
<user username="deployer" password="deployer" roles="manager-gui,manager-script,admin" />

我已经在 J​​enkins 部署容器插件中设置了正确的用户名密码和端口。该设置适用于本地 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 时遇到了同样的问题, 解决方案:- 我在用户角色中添加了 manager-script 和 manager-gui 并提供对 webapps/* 目录的完全访问权限。它帮助我成功部署工件并能够使用 manager-app 查看它。

如果没有任何效果,只需在 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>

在Tomcat9中,您不需要添加任何manager-XXX角色。您所要做的就是添加用户并分配 manager-gui(用于 GUI 访问)和 manager-script(用于像 Jenkins 部署一样访问)。 此外,请确保编辑文件 /webapps/manager/META-INF/context.xml,以注释掉 valve 或为 allow[=14 定义适当的 reg ex =]属性

第一步: 我们需要更新:\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"/>

部署成功。

您只需将 jenkins 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

来自 OS:Debian 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"/>