Artifact sharing failure

I have a build plan with stages and tasks running on a Remote Agent (Windows Server 2008 R2). I wanted to share an output executable as an artifact with another task in the same plan. The artifact can be seen, but cannot be copied from the remote agent to the host: there is a socket write error.

Communication between the host and remote agent has been secured with SSL certificates per the Atlassian documentation. The remote agent can communicate with the host OK: the plan works up until the point of sharing the artifact. What could be going wrong? Do I have to specify some other parameter in the wrapper to convince the artifact copy to take place over HTTPS instead of SSL? Do I need to open another port somewhere?

{code}

INFO | jvm 1 | 2012/08/12 17:10:52 | 2012-08-12 17:10:52,662 INFO 1-BAM::10.1.10.116::Agent:pool-3-thread-1 AbstractArtifactManager Publishing Client executables for PCB-PCBP-BUILDUI-20: 1 file(s) matching iCelero Internet Acceleration.exe in directory D: Users bamboo-agent-home xml-data build-dir PCB-PCBP-BUILDUI .. PCB-PCBP-CHKOUT IWP Win32 Release

INFO | jvm 1 | 2012/08/12 17:10:53 | 2012-08-12 17:10:53,176 ERROR 1-BAM::10.1.10.116::Agent:pool-3-thread-1 HttpMessageSender Exception occurred when posting message com.atlassian.bamboo.v2.build.agent.messages.ArtifactPublishMessage@262ad8e1. Connection has been shutdown: javax.net.ssl.SSLException: java.net.SocketException: Connection reset by peer: socket write error

INFO | jvm 1 | 2012/08/12 17:10:53 | javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLException: java.net.SocketException: Connection reset by peer: socket write error

INFO | jvm 1 | 2012/08/12 17:10:53 | at sun.security.ssl.SSLSocketImpl.checkEOF(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at sun.security.ssl.SSLSocketImpl.checkWrite(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at sun.security.ssl.AppOutputStream.write(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.io.BufferedOutputStream.flushBuffer(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.io.BufferedOutputStream.write(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at org.apache.commons.httpclient.ChunkedOutputStream.flushCacheWithAppend(ChunkedOutputStream.java:119)

INFO | jvm 1 | 2012/08/12 17:10:53 | at org.apache.commons.httpclient.ChunkedOutputStream.write(ChunkedOutputStream.java:178)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.io.ObjectOutputStream$BlockDataOutputStream.drain(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.io.ObjectOutputStream.writeFatalException(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.io.ObjectOutputStream.writeObject(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at com.atlassian.bamboo.v2.build.agent.remote.sender.HttpMessageSender$1.writeRequest(HttpMessageSender.java:59)

INFO | jvm 1 | 2012/08/12 17:10:53 | at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:495)

INFO | jvm 1 | 2012/08/12 17:10:53 | at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:1973)

INFO | jvm 1 | 2012/08/12 17:10:53 | at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:993)

INFO | jvm 1 | 2012/08/12 17:10:53 | at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:397)

INFO | jvm 1 | 2012/08/12 17:10:53 | at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170)

INFO | jvm 1 | 2012/08/12 17:10:53 | at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)

INFO | jvm 1 | 2012/08/12 17:10:53 | at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324)

INFO | jvm 1 | 2012/08/12 17:10:53 | at com.atlassian.bamboo.v2.build.agent.remote.sender.HttpMessageSender.send(HttpMessageSender.java:87)

INFO | jvm 1 | 2012/08/12 17:10:53 | at com.atlassian.bamboo.v2.build.agent.remote.RemoteArtifactManager.publishFileSet(RemoteArtifactManager.java:45)

INFO | jvm 1 | 2012/08/12 17:10:53 | at com.atlassian.bamboo.build.artifact.AbstractArtifactManager.publish(AbstractArtifactManager.java:95)

INFO | jvm 1 | 2012/08/12 17:10:53 | at com.atlassian.bamboo.build.artifact.BuildArtifactPostProcessor.call(BuildArtifactPostProcessor.java:59)

INFO | jvm 1 | 2012/08/12 17:10:53 | at com.atlassian.bamboo.build.pipeline.tasks.ExecuteBuildTask.performCustomBuildProcess(ExecuteBuildTask.java:161)

INFO | jvm 1 | 2012/08/12 17:10:53 | at com.atlassian.bamboo.build.pipeline.tasks.ExecuteBuildTask.call(ExecuteBuildTask.java:87)

INFO | jvm 1 | 2012/08/12 17:10:53 | at com.atlassian.bamboo.v2.build.agent.DefaultBuildAgent.build(DefaultBuildAgent.java:204)

INFO | jvm 1 | 2012/08/12 17:10:53 | at com.atlassian.bamboo.v2.build.agent.BuildAgentControllerImpl.waitAndPerformBuild(BuildAgentControllerImpl.java:103)

INFO | jvm 1 | 2012/08/12 17:10:53 | at com.atlassian.bamboo.v2.build.agent.DefaultBuildAgent$1.run(DefaultBuildAgent.java:109)

INFO | jvm 1 | 2012/08/12 17:10:53 | at com.atlassian.bamboo.build.pipeline.concurrent.NamedThreadFactory$2.run(NamedThreadFactory.java:50)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.lang.Thread.run(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | Caused by: javax.net.ssl.SSLException: java.net.SocketException: Connection reset by peer: socket write error

INFO | jvm 1 | 2012/08/12 17:10:53 | at sun.security.ssl.Alerts.getSSLException(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at sun.security.ssl.SSLSocketImpl.handleException(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at sun.security.ssl.SSLSocketImpl.handleException(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at sun.security.ssl.AppOutputStream.write(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.io.BufferedOutputStream.flushBuffer(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.io.BufferedOutputStream.write(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at org.apache.commons.httpclient.ChunkedOutputStream.flushCacheWithAppend(ChunkedOutputStream.java:119)

INFO | jvm 1 | 2012/08/12 17:10:53 | at org.apache.commons.httpclient.ChunkedOutputStream.write(ChunkedOutputStream.java:178)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.io.ObjectOutputStream$BlockDataOutputStream.write(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.io.ObjectOutputStream.write(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.nio.channels.Channels$WritableByteChannelImpl.write(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at com.atlassian.bamboo.v2.build.agent.messages.ArtifactTransferPayload.writeObject(ArtifactTransferPayload.java:83)

INFO | jvm 1 | 2012/08/12 17:10:53 | at sun.reflect.GeneratedMethodAccessor22.invoke(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.lang.reflect.Method.invoke(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.io.ObjectOutputStream.writeSerialData(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.io.ObjectOutputStream.writeObject0(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.io.ObjectOutputStream.writeSerialData(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.io.ObjectOutputStream.writeObject0(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | ... 20 more

INFO | jvm 1 | 2012/08/12 17:10:53 | Caused by: java.net.SocketException: Connection reset by peer: socket write error

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.net.SocketOutputStream.socketWrite0(Native Method)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.net.SocketOutputStream.socketWrite(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at java.net.SocketOutputStream.write(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at sun.security.ssl.OutputRecord.writeBuffer(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at sun.security.ssl.OutputRecord.write(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at sun.security.ssl.SSLSocketImpl.writeRecordInternal(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | at sun.security.ssl.SSLSocketImpl.writeRecord(Unknown Source)

INFO | jvm 1 | 2012/08/12 17:10:53 | ... 40 more

INFO | jvm 1 | 2012/08/12 17:10:53 | 2012-08-12 17:10:53,223 INFO 1-BAM::10.1.10.116::Agent:pool-3-thread-1 HttpMethodDirector I/O exception (java.io.IOException) caught when processing request: Exception occurred when posting message com.atlassian.bamboo.v2.build.agent.messages.ArtifactPublishMessage@262ad8e1. Connection has been shutdown: javax.net.ssl.SSLException: java.net.SocketException: Connection reset by peer: socket write error

{code}

5 answers

1 accepted

We used nginx; once it was upgraded to support HTTP 1.1, Artifact Copying worked like a charm. Thanks to Atlassian Support who helped resolve this.

0 votes

Which agent server URL are you using? Does it point to Bamboo directly, or some fronting server like nginx?

I answered the question with my comment.

I'm having the same problem with our nginx -> bamboo setup. The artifact copier is failing to publish artifacts from our remote agent.

What was the change you made in the nginx configure Adam that enabed the HTTP 1.1 support? We have added 'proxy_http_version 1.1' but still receiving the same error.

Thanks!

There is some downloading and rebuilding to be done to install the chunked encoding support into the NGinx application. I assume that you have that built and installed?

Once that is done, the key is to add the chunked encoding directives to the NGinx sites-enabled configuration file (lines 11--15 below).

server {
    listen   443;
    server_name  bamboo.yourdomain.com;
    ssl  on;
    ssl_certificate         /etc/nginx/ssl/yourdomain.com.crt;
    ssl_certificate_key     /etc/nginx/ssl/yourdomain.com.key;
    ssl_protocols  TLSv1 SSLv3;
    ssl_ciphers RSA:!EXP:!NULL:+HIGH:+MEDIUM:-LOW;
    ssl_prefer_server_ciphers   on;
    
    chunkin     on;
    error_page 411 = @my_411_error;
    location @my_411_error {
        chunkin_resume;
    }
    
    location / {
        proxy_pass      http://bamboo.yourdomain.com:8085/;
        proxy_redirect http://bamboo.yourdomain.com:8085/ /;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Excellent thanks Adam! Adding chunked encoding support seems to have fixed the problem.

I had exactly the same problem and started looking into configuring "chunkin" for our Nginx install. Then I found that from Nginx 1.3.9 onward, this "chunkin" configuration is not necessary anymore, since "chunked_transfer_encoding" is now on by default. We were running Nginx 1.4.6. So this was not the problem. Then I found that another build plan was returning a "413 Request Entity Too Large" error, which seemed strange, since out "client_max_body_size" was set to 20M and none of the artifacts were larger than this. Nevertheless, I increased the "client_max_body_size" to 800M and lo and behold: it worked. Turns out that Bamboo packed the artifacts into one package with a total size of 46MB. 

 

Then I gave the build plan with the initial problem another try. That plan was building a far bigger solution. Turns out that increasing the "client_max_body_size" worked for this as well: the packed artifacts had a total size of 650MB!

Suggest an answer

Log in or Join to answer
Community showcase
Renan Battaglin
Published May 18, 2017 in Bamboo

FAQ: How to Upgrade Bamboo Server

Bamboo 5.9 will no longer be supported after June 12, 2017. What does this mean? As part of our End of Life policy, Atlassian supports major versions for two years after the first major iteratio...

1,072 views 0 5
Read article

Atlassian User Groups

Connect with like-minded Atlassian users at free events near you!

Find a group

Connect with like-minded Atlassian users at free events near you!

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you
Atlassian Team Tour

Join us on the Team Tour

We're bringing product updates and pro tips on teamwork to ten cities around the world.

Save your spot