2010-12-07 99 views
7

我在CruiseControl.NET中运行几个项目。他们中的许多人没有构建错误并且构建成功。他们都试图在构建之前提取最新的代码。CruiseControl.NET零星的SVN 500错误

我注意到他们经常失败的建设; CruiseControl报告“例外”。例外是SVN 500错误(内部服务器错误)。它会随机但持续地发生(例如,在一个项目中,每个交替构建失败)。

我试着用相同的证书检查出这些零星失败的项目,它的工作原理。我知道项目构建,因为不是每个构建都失败。

问题是什么?

对于它的价值,这里是一个典型的例外的顶线(不SVN项目URL或凭证):

ThoughtWorks.CruiseControl.Core.CruiseControlException: Source control operation failed: svn: Server sent unexpected return value (500 Internal Server Error) in response to OPTIONS request for 'https://some/url/trunk' 
. Process command: C:\Program Files\CollabNet Subversion Client\svn.exe log https://some/url/trunk -r "{2010-12-04T09:09:19Z}:{2010-12-07T09:08:48Z}" --verbose --xml --username ******** --password ******** --non-interactive --no-auth-cache 

编辑:有时,这似乎是因为有一个在本地的SVN冲突夹。但这并不一致。


赏金:我添加了一个赏金的通用解决方案,以这样的:如何CC.NET被配置为优雅地SVN错误处理,即不把通过定期更新检查触发SVN失败(而不是预定的每日构建)作为构建失败,而是优雅地恢复,直到它被修复或直到连接恢复。

虽然我不是CC.NET的专家,但也没有长时间寻找,我还没有设法自己弄清楚。对此有支持或需要编码吗?谢谢!

为了澄清,

  • 我们有一个CC.NET服务器设置检查新的提交和购买+建设+测试所有更改,然后报告结果。
  • 但是,如果SVN服务器出现故障或者我们失去了连接,那么它会认为这是最后一次提交破坏了构建:它将构建状态设置为红色并将最后一个提交者的电子邮件视为它们的错误。
  • 是的,这对于一天一次的构建工作来说是一个问题,但对于持续的每次提交整合,我不认为这是有用的行为。
+0

无论原因如何,我也会对配置CC.NET忽略SVN异常而不是失败构建的方式感兴趣。 – Rup 2010-12-08 21:15:59

+0

您的CI设置不应该产生干净的结帐会产生什么?如果是这样,那么如果发生异常,您的整个构建环境将是无效的。 – Mark 2010-12-10 15:55:39

回答

1

解决此问题的一个难办法是检查批处理文件或自定义包装器(而不是CruiseControl.NET的源代码管理工具)调用svn客户端并创建文件(或如果构建是必需的,则可以使用其他一些信令改变方式)。批处理或包装可以根据需要处理异常。当然,这个解决方案可能需要改变构建过程的其余部分。