8

我正在尝试使用来自 Maven 的 Cargo 通过 https 部署到远程 Tomcat7。

我已经设置了经理脚本角色,并且到目前为止我已经成功地能够远程取消部署应用程序。

我所拥有的看起来像这样:

<plugin>
    <groupId>org.codehaus.cargo</groupId>
    <artifactId>cargo-maven2-plugin</artifactId>
    <version>1.1.2</version>
    <configuration>
        <container>
            <containerId>tomcat7x</containerId>
            <type>remote</type>
        </container>

        <configuration>
            <type>runtime</type>
            <properties>
                <cargo.remote.uri>https://xxx/manager/text</cargo.remote.uri>
                <cargo.remote.username>${tomcat.username}</cargo.remote.username>
                <cargo.remote.password>${tomcat.password}</cargo.remote.password>
            </properties>
        </configuration>

        <deployer>
            <type>remote</type>
            <deployables>
                <deployable>
                    <groupId>mycomp</groupId>
                    <artifactId>myartifact</artifactId>
                    <type>war</type>
                    <properties>
                        <context>/</context>
                    </properties>
                </deployable>
            </deployables>
        </deployer>

    </configuration>
</plugin>

好吧,我知道凭据并且一切都设置正确,并且我使用了新的 /text 界面,并且能够取消部署现有的应用程序。但是在尝试运行部署时:

mvn cargo:deployer-deploy -e

我得到一个根本原因的错误:

Caused by: java.io.IOException: Error writing request body to server
at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.checkError(HttpURLConnection.java:2809)
at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.write(HttpURLConnection.java:2792)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:109)
at org.codehaus.cargo.container.tomcat.internal.TomcatManager.pipe(TomcatManager.java:605)
at org.codehaus.cargo.container.tomcat.internal.TomcatManager.invoke(TomcatManager.java:501)
at org.codehaus.cargo.container.tomcat.internal.TomcatManager.deployImpl(TomcatManager.java:569)
at org.codehaus.cargo.container.tomcat.internal.TomcatManager.deploy(TomcatManager.java:273)
at org.codehaus.cargo.container.tomcat.internal.TomcatManager.deploy(TomcatManager.java:256)
at org.codehaus.cargo.container.tomcat.internal.TomcatManager.deploy(TomcatManager.java:240)
at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.deploy(AbstractTomcatManagerDeployer.java:101)
... 25 more

我很快就明白了,所以它不会超时。

文件可以很大吗?这是一场 60 MB 的战争。我确保我的 nginx 允许更大:

client_max_body_size 200M;

我还在管理器 webapps web.xml 中的文本管理器中添加了多部分配置,如下所示:

servlet> 管理器 org.apache.catalina.manager.ManagerServlet 调试 2

<multipart-config>
  <max-file-size>209715200</max-file-size>
  <max-request-size>209715200</max-request-size>
  <file-size-threshold>0</file-size-threshold>
</multipart-config>

http://nexnet.wordpress.com/2011/04/27/large-war-file-cannot-be-deployed-in-tomcat-7/

我在很多方面都喜欢 Maven,但是错误报告真的很糟糕。任何帮助高度赞赏。

4

4 回答 4

3

cargo:deploy最近,当我尝试使用工件时,我被这个错误所困扰。通常我们在部署之前停止、清理和启动webapps目录,但是这次我注意到一个工件没有被删除。

切换到cargo:redeploy错误解决后。

于 2015-01-28T07:27:40.280 回答
1

在使用 ant deploy 任务部署到 tomcat 8 服务器时,我遇到了同样的错误消息。我的问题是我的服务器空间不足。检查tomcat的管理器日志是我的线索:

10-Jul-2014 10:15:38.065 INFO [http-nio-8080-exec-2] org.apache.catalina.core.ApplicationContext.log Manager: deploy: Deploying web application '/abc_beta'
10-Jul-2014 10:15:38.065 INFO [http-nio-8080-exec-2] org.apache.catalina.core.ApplicationContext.log Manager: Uploading WAR file to /usr/share/apache-tomcat-8.0.9/webapps/abc_beta.war
10-Jul-2014 10:15:57.962 SEVERE [http-nio-8080-exec-2] org.apache.catalina.core.ApplicationContext.log Manager: managerServlet.check[/abc_beta]
    java.io.IOException: No space left on device
    ... stacktrace ...
于 2014-07-10T16:40:09.957 回答
0

这个异常的另一个原因是我们在周一突然发现的,当时使用cargo 插件插件在我们的Jenkins实例上部署作业停止工作。不是全部,而是一些。主要区别在于Nexus存储库的作业中有一个自定义settings.xml ,可从中下载可部署文件。

成功的部署作业已按照https://support.sonatype.com/entries/20943003-configure-maven-to-download-from-nexus中的描述进行配置,失败的部署作业缺少repositorypluginRepository

我仍然不确定为什么行为会在某一时刻发生变化。任何提示?

于 2015-02-11T15:12:53.930 回答
0

我不记得我是否或如何解决这个问题,但由于 rascio 有同样的问题,我会发布一个想法。也许是需要 ssl 的 wagon-extension:

    <extensions>
        <extension>
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-ssh</artifactId>
            <version>2.2</version>
        </extension>
    </extensions>

疯狂的猜测。我认为您在 Maven 3.0 之前不需要它。

于 2012-05-11T11:50:40.493 回答