Jenkins部署大文件至Artifactory时挂起问题求助
排查Jenkins部署大Spring Boot JAR到Artifactory挂起问题
可能的原因及排查步骤
1. Jenkins端上传超时或内存限制
- 检查Jenkins代理节点的内存配置:大文件上传时,代理节点可能因内存不足导致进程挂起。修改Jenkins代理的JVM启动参数,增加堆内存,比如在启动脚本中添加
-Xmx2G -Xms1G(可根据实际情况调整)。 - 调整Artifactory插件的超时设置:在Jenkins全局配置的Artifactory服务器设置中,将超时值调至更大(比如300000毫秒,即5分钟)。如果是流水线脚本配置,确保添加
timeout参数,示例:artifactoryUpload(serverId: 'artifactory-server', spec: '''{ "files": [ { "pattern": "target/*.jar", "target": "libs-release-local/com/example/" } ] }''', timeout: 300)
2. Artifactory端Tomcat的隐式限制
- 补充Tomcat的
maxSwallowSize参数:虽然已设置maxPostSize=-1,但maxSwallowSize默认会限制客户端在请求中止后发送的数据量,可能影响大文件上传。修改配置如下并重启Artifactory:tomcat: connector: extraConfig: "maxPostSize='-1' connectionTimeout='1500000' maxSwallowSize='-1'" - 检查Artifactory服务器的磁盘IO负载:大文件上传时磁盘读写瓶颈可能导致任务挂起,用
iostat、top等工具查看磁盘使用率、读写速度,确认是否存在慢IO或磁盘空间不足的情况。
3. Spring Boot JAR结构的特殊影响
Spring Boot可执行JAR包含嵌套的BOOT-INF/lib目录,结构比普通WAR更复杂,可能触发插件或Artifactory的特殊处理逻辑:
- 改用JFrog CLI上传替代Jenkins插件:在流水线中调用
jf rt upload命令上传大JAR,验证是否能成功,示例:
如果CLI上传正常,说明是Jenkins插件的问题,可尝试升级Artifactory Plugin至最新兼容版本(当前使用3.18.9,最新版已更新至4.x系列)。jf rt upload target/your-app.jar libs-release-local/com/example/ --server-id artifactory-server - 临时关闭Artifactory的哈希校验计算:上传大文件时,哈希值计算可能占用大量服务器资源,导致处理缓慢。可临时关闭校验或在上传时指定跳过校验(需注意风险),验证是否能完成上传。
4. 网络层面的连接限制
- 测试直接网络上传:在Jenkins服务器上用
curl直接调用Artifactory REST API上传大文件,排查是否存在防火墙、代理的超时限制,示例:
如果curl上传也挂起,说明是网络问题,需排查防火墙、代理的连接超时设置。curl -u username:password -T target/your-app.jar https://artifactory-url/libs-release-local/com/example/your-app.jar
总结
优先通过网络测试、JFrog CLI上传排除环境问题,再检查Jenkins代理内存、插件超时配置,最后调整Artifactory的Tomcat参数和存储性能。由于其他用户大WAR上传正常,大概率是Spring Boot JAR的上传流程触发了插件或Tomcat的特定限制,替换上传方式是快速验证的有效方法。
内容的提问来源于stack exchange,提问作者Steffen Lomholt Hansen
相关产品推荐
相关产品推荐

