当TeamCity从SSH Git存储库获取更改时,如何解决超时异常



我已经将Git存储库从网络上的共享文件夹移动到运行gitolite的SSH服务器上。我添加了一个公钥/私钥供TeamCity使用,并将VCS根指向它。当测试连接成功时,这一切都工作正常,我的构建配置显示了挂起的更改。

然而,当TeamCity试图获取这些未决的更改时,我得到以下错误:

'git fetch' command failed.
exception: Timeout exception

切换到详细日志记录,我看到它在90秒后超时-我预计在正常情况下,获取这些更改需要几秒钟的时间。

因为我开始尝试解决这个问题,我已经把我的VCS根改为"默认私钥",并添加了config, id_rsa和known_hosts文件所需的。ssh文件夹。我在日志中看到了指纹和密码消息,直到我把必要的东西放在这些文件中,现在我的服务器又回到了给出超时异常,就像我在VCS根目录中指定密钥时一样。

如果我从命令行运行Git,我可以在没有任何提示的情况下克隆存储库(当我如上所述设置了.ssh文件夹时)。这是来自不同的用户帐户,因为TC在默认的SYSTEM帐户下作为服务运行,但我不认为这是原因,因为正如我所说,我可以看到TC已经为该帐户获取了对。ssh文件夹的更改。

怎么了?

您已经为TeamCity服务器设置了密钥,但是您为代理也设置了密钥吗?这就解释了为什么在配置中测试连接可以工作,但在代理执行时却不能工作。

快速调试方法:

在VCS设置中,将VCS Checkout mode更改为Automatically on server,看看是否有效?

更新:

你能登录到TeamCity服务器并从你的git仓库作为teamcity用户运行一个手册git clone吗?这样你可以看到它的工作情况,也可以保存为可信主机等。

我没有使用team city,但我使用GO(来自thoughtworks)进行持续集成,在那里我遇到了类似的问题。

您是否可以检查正在构建代理上运行任务的用户的环境变量路径?如果你使用的是msysgit,那么msysgit的bin和cmd文件夹都应该在路径中。

当你有大量的回购时,这种情况就会发生。您可以遵循以下建议:

增加OSX或Linux用户机的超时时间:

  1. 创建~/。ssh/config文件(如果还不存在)
  2. 添加SSH ServerAliveInterval ServerAliveCountMax设置到文件中,例如:
主机*


86400年,ServerAliveInterval
4, ServerAliveCountMax

最新更新