我遇到的问题是TeamCity由于多种原因而难以解决。到目前为止,我环顾四周,找不到任何有用的答案。
我们有一个在端口8080上运行的teamcity服务器,两个代理分别在端口9090和9091上连接到它。代理注册成功,可以接受新版本。构建完成后,测试已经过去,日志状态“发送工件”停止,工件永远不会到达服务器。离开这里过夜,我提出要求停止失败的构建。
我们最近切换到了一个新的防火墙,但是在设置了8080,9090和9091所需的端口规则之后,事情一直在进行。由于我们已经开始工作,但是现在没有任何改变,但是现在没有任何改变。
到日志...... 服务器知道失败,因为我可以在几个地方看到日志:
jetbrains.buildServer.SERVER - Failed to upload artifact, due to error: org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Read timed out
代理也有日志说明了类似的原因:
jetbrains.buildServer.AGENT - Failed to publish artifacts because of error: java.net.SocketException: Connection reset by peer: socket write error, will try again.
在所有这些过程中,防火墙日志显示允许通过预期端口上的所有流量。奇怪的是,有些日志看起来像这样:
2016-04-01 10:45:00 Deny [sourceIp] [targetIP] 49426/tcp 8080 49426 0-External Firebox tcp syn checking failed (expecting SYN packet for new TCP connection, but received ACK, FIN, or RST instead). 558 113 (Internal Policy) proc_id="firewall" rc="101" msg_id="3000-0148" tcp_info="offset 5 A 478076245 win 258"
检查代理上的端口49426表明它正被java.exe使用。现在我假设这可能与TeamCity有关,因为它在JVM中运行。下一步是搜索我能找到的每一个配置,以找出这个端口号的来源。一段时间后,代理商决定重试并更改端口。在我看来,java只是使用它想要的任何端口(就像在代码中未分配一样),因此代理配置中是否会缺少某些东西来指示它用于工件上传的哪个端口?
我确实在某地读过,服务器或防火墙可能不喜欢超过一定大小的请求或文件上传(最大文件是81兆)但我们没有发现有任何迹象表明存在这样的规则。 / p>
Teamcity版本已旧(v7.1.1),但我们目前无法升级(由于硬盘空间问题,我正在等待批准使用更新,更大的服务器)。
更新 我们非常简单地打开了一些防火墙,看看它是否是问题的原因无济于事。在这一点上,我不相信防火墙是问题所在。
有什么想法吗? 提前谢谢。
更新2 我最终建立了一个全新的构建服务器,在那里工作得很好。新服务器具有最新的TeamCity版本,但代理是相同的机器,工件上传似乎工作得很好。这不是问题的真正解决方案,但至少我现在有一个工作设置。