我们有以下设置:
我们的Git服务器安装在运行Ubuntu服务器64位的另一台机器上。 CCNet Windows服务使用管理员帐户运行,并使用ssh访问Ubuntu git服务器。 执行强制构建时,我们没有问题,获取源代码和构建都很好。当它在时间触发器上运行时,我们会得到以下例外:
ThoughtWorks.CruiseControl.Core.CruiseControlException: Source control operation has timed out.
at ThoughtWorks.CruiseControl.Core.Sourcecontrol.ProcessSourceControl.Execute(ProcessInfo processInfo)
at ThoughtWorks.CruiseControl.Core.Sourcecontrol.Git.GitFetch(IIntegrationResult result)
at ThoughtWorks.CruiseControl.Core.Sourcecontrol.Git.CreateUpateLocalRepository(IIntegrationResult result)
at ThoughtWorks.CruiseControl.Core.Sourcecontrol.Git.GetModifications(IIntegrationResult from, IIntegrationResult to)
at ThoughtWorks.CruiseControl.Core.Sourcecontrol.MultiSourceControl.GetModifications(IIntegrationResult from, IIntegrationResult to)
at ThoughtWorks.CruiseControl.Core.Sourcecontrol.QuietPeriod.GetModificationsWithLogging(ISourceControl sc, IIntegrationResult from, IIntegrationResult to)
at ThoughtWorks.CruiseControl.Core.Sourcecontrol.QuietPeriod.GetModifications(ISourceControl sourceControl, IIntegrationResult lastBuild, IIntegrationResult thisBuild)
at ThoughtWorks.CruiseControl.Core.IntegrationRunner.GetModifications(IIntegrationResult from, IIntegrationResult to)
at ThoughtWorks.CruiseControl.Core.IntegrationRunner.Integrate(IntegrationRequest request)
我们的ccnet项目使用多个git存储库,示例配置如下所示:
<sourcecontrol type="multi">
<sourceControls>
<git>
<repository>git@somerepo.git</repository>
<executable>$(gitcmdpath)</executable>
<timeout units="minutes">10</timeout>
</git>
<git>
<repository>git@somerepo2.git</repository>
<executable>$(gitcmdpath)</executable>
<timeout units="minutes">10</timeout>
<workingDirectory>c:\somerepo2</workingDirectory>
</git>
</sourceControls>
</sourcecontrol>
我们有几个ccnet项目使用相同的存储库集(虽然已签出到不同的文件夹),并且在没有代码更改时它们都以相同的方式失败。我碰巧将间隔触发器设置为相同的长度,因此它们都是大致同时检查存储库。这可能是他们超时的原因吗?我也找不到任何从ccnet.log中引用它的东西来调试它。
欢迎任何帮助。
答案 0 :(得分:1)
我现在有一个解决方法,将连续构建放入一个队列,将完整构建放入另一个队列。连续构建基于30秒间隔的源控制修改,而完整构建每天一次,因此它们现在是分开的。我已经实施了大约2周,没有任何问题。