我遇到了 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 兆),但我们没有发现任何迹象表明存在这样的规则。
Teamcity 版本较旧(v7.1.1),但我们目前无法升级(由于硬盘空间问题,我正在等待批准使用更新、更大的服务器)。
更新 我们非常短暂地打开了一些防火墙,看看它是否是导致问题的原因,但无济于事。在这一点上,我不相信防火墙是问题所在。
有任何想法吗?提前致谢。
更新 2 我最终设置了一个全新的构建服务器,在那里一切正常。新服务器具有最新的 TeamCity 版本,但代理是同一台机器,并且工件上传似乎工作得很好。这并不是问题的真正解决方案,但至少我现在有一个工作设置。