CruiseControl.Net 在使用 msbuild 任务的项目后重新启动

Posted

技术标签:

【中文标题】CruiseControl.Net 在使用 msbuild 任务的项目后重新启动【英文标题】:CruiseControl.Net restarts after project with msbuild task 【发布时间】:2014-08-26 14:37:25 【问题描述】:

我正在尝试设置一个相当简单的 CruiseControl.NET 构建服务器,但我发现使用 MSBuild 的项目出现了奇怪的行为。每次运行项目的构建并执行 msbuild(通过强制或通过更改源代码控制)时,构建成功完成,但 CCNet 也会重新启动。我注意到这一点是因为所有项目的“下一个构建时间”都提前到了当前时间 + 初始秒数。

无论我是将 CCNet 作为服务运行还是通过命令行可执行文件运行,都会出现此行为。 在命令行上运行时,调试输出没有给我任何有用的信息 - 它只是立即从项目构建的最后一行跳转到“启动”输出。

附加信息:

TFS 是源代码控制服务器 我的构建只进入了工作目录 我的发布只是从工作目录复制到工件目录 如果我注释掉 msbuild 任务,运行项目构建不会重新启动 CruiseControl 在构建期间未点击或更新 CruiseControl 的服务器或状态目录 当发生这种情况并且我作为服务运行时,事件查看器中没有任何用处。 CCService 不报告停止/启动 - 就像巡航控制正在内部重新启动。

这是 msbuild 配置: <tasks> <msbuild> <executable>C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable> <workingDirectory>$[$CCNetWorkingDirectory]\$(PathToSolution)</workingDirectory> <projectFile>$(SolutionFile)</projectFile> <buildArgs>/p:Configuration=Release /v:d</buildArgs> <timeout>900</timeout> </msbuild> </tasks>

最后,这是 msbuild 进程结束/服务器重启时的跟踪日志。

Done building target "Build" in project "MYAPP.sln".
Done Building Project "C:\CCNet\WD\NET\Main\MYAPP\MYAPP.sln" (default targets).     

Build succeeded.
    0 Warning(s)
    0 Error(s) 

Time Elapsed 00:00:05.35    

2014-08-26 20:11:41,881 [NET.App.MYAPP] [INFO] - Delete merged file 'C:\CCNet\BuildArtifacts\NET.App.MYAPP\msbuild-results-dcf002da-d0d0-4d0a-8b86-fb25adaf1ac3.xml'.
2014-08-26 20:11:46,478 [NET.App.MYAPP] [INFO] - Integration complete: Success - 8/26/2014 8:11:41 PM
2014-08-26 20:11:46,579 [NET.App.MYAPP] [INFO] - Integrator for project: NET.App.MYAPP is now stopped.
2014-08-26 20:11:57,444 [257] [INFO] - CruiseControl.NET Server 1.8.5.0 -- .NET Continuous Integration Server
2014-08-26 20:11:57,465 [257] [INFO] - Copyright © 2003 - 2014 ThoughtWorks Inc.  All Rights Reserved.
2014-08-26 20:11:57,466 [257] [INFO] - .NET Runtime Version: 2.0.50727.5477     Image Runtime Version: v2.0.50727
2014-08-26 20:11:57,467 [257] [INFO] - OS Version: Microsoft Windows NT 6.1.7601  Service Pack 1           Server locale: English (United States)
2014-08-26 20:11:57,467 [257] [INFO] - Reason: File change delay finished
2014-08-26 20:11:57,944 [CCNet Server] [INFO] - Reading configuration file "C:\CCNet\Server\ccnet.config"
2014-08-26 20:11:58,347 [CCNet Server] [WARN] - Configuration does not have any version information - assuming the configuration is for version 1.8
2014-08-26 20:11:58,800 [CCNet Server] [INFO] - Log cache time set to 5 minutes
2014-08-26 20:11:58,990 [CCNet Server] [INFO] - Registered channel: tcp
2014-08-26 20:11:58,991 [CCNet Server] [INFO] - CruiseManager: Listening on url: tcp://32.32.29.129:21234/CruiseManager.rem
2014-08-26 20:11:58,992 [CCNet Server] [INFO] - Registered channel: tcp
2014-08-26 20:11:58,993 [CCNet Server] [INFO] - CruiseServerClient: Listening on url: tcp://32.32.29.129:21234/CruiseServerClient.rem
2014-08-26 20:11:58,994 [CCNet Server] [INFO] - Starting CruiseControl.NET Server

【问题讨论】:

您可以查看更改 ccservice.exe.config 中的日志记录级别;它可能会提供更多细节。 cruisecontrolnet.org/projects/ccnet/wiki/… 我添加了在服务器构建/重启结束时获得的跟踪输出。我发现唯一有趣的部分是“原因”行,但我不确定这意味着什么。这是 CCNet 代码中的链接 - github.com/ccnet/CruiseControl.NET/blob/master/project/service/… 今天更新 - 今天早上它运行了 20-30 个不同项目的构建,并且只在其中 2 个之后重新启动。我打算让它再运行几天,看看项目和/或触发重启的更改类型是否有任何一致性。 虽然在过去的 5 天里我已经看到它发生了 3 次,但是这个问题的发生率已经大大减少了。我已经看到许多 .NET 构建运行并且不会触发重新启动。到目前为止,还没有关于导致问题的原因或原因(这 3 起事件都发生在不同的项目上)。唯一已知的变化是我现在 100% 作为服务运行,而不是通过控制台。 【参考方案1】:

看起来 ccnet 注意到应用程序目录中的 .dll 文件发生了变化,并重新启动以吸收这些变化。

Ccnet 正在寻找对 any .dll 文件的更改,因此如果您的构建输出至少一个到此目录,则会导致重新启动。

【讨论】:

也就是说,我本来希望在日志中看到One or more DLLs have changed ...

以上是关于CruiseControl.Net 在使用 msbuild 任务的项目后重新启动的主要内容,如果未能解决你的问题,请参考以下文章

为啥 CruiseControl.NET 无法构建,但使用命令行中的 msbuild.exe 有效?

在 devenv 和 msbuild 中使用 CruiseControl.net 时输出二进制文件的任何差异

托管源代码控制托管和与 CVSDude 和 CruiseControl.net 的持续集成

如果程序显示对话框,则终止程序(在 CruiseControl.net 下运行的 devenv.com)

CruiseControl [.Net] 与 TeamCity 的持续集成?

CruiseControl.NET开篇