Jenkins Subversion检出失败报错:E175002: CRLF expected at end of chunk: -1/-1
解决Jenkins从Visual SVN Server检出大项目时的CRLF Chunk错误
我之前在Windows环境下处理过类似的Jenkins+SVN大项目检出问题,这个svn: E175002: CRLF expected at end of chunk错误大概率和大文件传输时的网络中断、SVN客户端的HTTP配置,或是Jenkins服务的运行限制有关,给你整理了几个实用的排查和解决步骤:
1. 调整SVNKit的HTTP超时与缓冲区参数
Jenkins用的是SVNKit这个Java版SVN客户端,你可以通过修改Jenkins服务的启动参数来优化传输配置:
- 找到Jenkins的Windows服务(右键「此电脑」→「管理」→「服务和应用程序」→「服务」),右键Jenkins服务选择「属性」
- 在「常规」标签页的「可执行文件路径」末尾,添加以下JVM参数:
这里把超时设为1小时(3600000毫秒),缓冲区调到10MB,避免大文件传输时因为超时或缓冲区溢出中断。-Dsvnkit.http.timeout=3600000 -Dsvnkit.http.buffer-size=10485760 - 重启Jenkins服务,再尝试检出项目。
2. 放宽Visual SVN Server的请求限制
Visual SVN Server默认对大请求的大小有限制,这会导致REPORT请求失败:
- 打开Visual SVN Server Manager,右键你的目标仓库→「属性」→「HTTP设置」
- 把「最大请求大小」调整为更大的值(比如10GB,对应字节数
10737418240),同时把「连接超时」设为3600秒(1小时) - 重启Visual SVN Server服务,让配置生效。
3. 切换到SVN原生协议(替代HTTPS)
HTTPS传输大文件时容易受SSL握手、防火墙或代理的干扰,试试改用SVN协议:
- 在Visual SVN Server Manager中,右键服务器→「属性」→「网络」,确保勾选了「启用SVN协议」(默认端口3690)
- 修改Jenkins项目里的SVN地址为
svn://你的服务器IP/myrepo - 检查Windows防火墙,允许3690端口的双向通信,然后重新触发检出。
4. 优化Jenkins服务的权限与内存配置
Jenkins作为Windows服务运行时,权限不足或内存不够也会拖垮大文件传输:
- 右键Jenkins服务→「属性」→「登录」,确保运行服务的账户拥有本地管理员权限(至少要有工作区目录的读写权限,以及访问SVN服务器的网络权限)
- 同样在启动参数里添加内存配置,比如
-Xmx4g -Xms2g,给Jenkins分配4GB最大堆内存,避免内存不足导致传输中断。
5. 尝试增量检出或拆分项目
如果项目实在太大,一次性检出风险太高,可以试试:
- 先在Jenkins服务器上用命令行
svn checkout https://example.com/myrepo手动完成第一次检出,然后让Jenkins直接使用这个本地目录作为工作区,后续只做增量更新 - 或者把大项目拆成多个子模块,在Jenkins里分别检出每个子模块,减少单次传输的数据量。
6. 更新Subversion插件(SVNKit)
你的Jenkins版本是v2.107.2,自带的SVNKit可能比较旧,存在大文件传输的已知bug:
- 进入Jenkins的「插件管理」→「已安装」,找到「Subversion Plugin」,检查是否有可用更新,更新到和Jenkins版本兼容的最新版
- 更新完成后重启Jenkins,再测试检出。
内容的提问来源于stack exchange,提问作者JackPGreen
相关产品推荐
相关产品推荐

