如何配置TeamCity以--stream方式克隆Mercurial仓库替代init/pull?
解决TeamCity搭配Kallithea大项目克隆连接断开问题
一、配置TeamCity使用--stream方式克隆
旧版TeamCity支持自定义VCS checkout命令,按以下步骤配置即可实现:
- 打开目标项目的VCS根配置,进入编辑界面
- 在「VCS checkout mode」中选择「自定义命令」(旧版可能叫「Manually run commands」或类似选项)
- 替换默认的init+pull逻辑,直接使用stream克隆:
- 若仅需首次克隆,执行命令:
git clone --stream <你的Kallithea仓库地址> %teamcity.build.checkoutDir% - 要兼容增量更新,可编写Windows批处理脚本(适配TeamCity环境变量):
@echo off set checkout_dir=%teamcity.build.checkoutDir% if not exist "%checkout_dir%\.git" ( git clone --stream <你的仓库URL> "%checkout_dir%" ) else ( cd /d "%checkout_dir%" git pull ) - 将这个脚本设置为TeamCity的VCS checkout执行命令,注意替换实际的仓库URL
- 若仅需首次克隆,执行命令:
二、其他可行解决方案
- 调整Waitress/Kallithea参数:除
asyncore_loop_timeout外,试试调大Waitress的max_request_body_size(比如设为1073741824即1GB)、keepalive超时时间;在Kallithea配置文件中增加timeout = 300(延长到5分钟),或调整wsgi.max_request_line参数 - 拆分大仓库:把项目拆分为多个子模块,或按业务模块拆分成独立仓库,降低单次克隆的数据量,从根源减少连接超时概率
- 搭建本地镜像仓库:在TeamCity同局域网内部署Git镜像,定期从Kallithea拉取同步,TeamCity直接从本地镜像克隆,避免跨网络长连接的不稳定问题
- 升级组件版本:如果业务允许,优先升级TeamCity和Kallithea到较新版本——旧版本的Git协议、WSGI服务器可能存在已知的连接稳定性bug,新版本通常会修复这类问题
内容的提问来源于stack exchange,提问作者The incredible Jan
相关产品推荐
相关产品推荐

