Msbuild 如何记录在每项任务中花费的时间?
在Teamcity上,我的项目的构建日志如下所示:Msbuild 如何记录在每项任务中花费的时间?,msbuild,teamcity,Msbuild,Teamcity,在Teamcity上,我的项目的构建日志如下所示: [Build] MSBuild (28s) [CoreCompile] Csc (6s) [RunCodeAnalysis] CodeAnalysis (11s) [StyleCop] StyleCopTask (9s) [Build] MSBuild (9s) [CoreCompile] Csc [RunCodeAnalysis] CodeAnalysis (8s) [StyleCop] St
[Build] MSBuild (28s)
[CoreCompile] Csc (6s)
[RunCodeAnalysis] CodeAnalysis (11s)
[StyleCop] StyleCopTask (9s)
[Build] MSBuild (9s)
[CoreCompile] Csc
[RunCodeAnalysis] CodeAnalysis (8s)
[StyleCop] StyleCopTask
这是一个简化的摘录,完整的日志有数千行长。无论如何,这些行显示了每个msbuild任务花费的时间(如果省略括号中的时间,我理解这意味着不到一秒钟)
Teamcity是否有可能将这些信息绘制成一张图表,以积累类似的任务?因此,对于上面的示例,该图显示C#编译器为6秒,代码分析为19秒,StyleCop为9秒
对于具有多个“构建步骤”的项目,Teamcity在“PerfMon”选项卡下的表格中显示每个步骤花费的时间。我喜欢这样。但我的项目是一个漫长的“构建步骤”(msbuild)。我想知道时间是如何在里面度过的
动机:我们的建设非常缓慢。我很好奇,与实际编译代码(Csc是C#编译器)相比,花在样式Cop和代码分析上的时间有多长。如果您对简单的控制台输出没有问题,请尝试使用(/clp:PerformanceSummary)调用MsBuild 在构建结束时,它会输出一个详细的摘要,如下所示
...
14 ms SplitResourcesByCulture 3 calls
18 ms ResolveProjectReferences 3 calls
22 ms PostBuildEvent 1 calls
28 ms CleanReferencedProjects 3 calls
48 ms UpdateAssemblyInfo 1 calls
51 ms CoreResGen 3 calls
74 ms CoreClean 3 calls
103 ms _CopyOutOfDateSourceItemsToOutputDirectory 2 calls
177 ms _CopyFilesMarkedCopyLocal 3 calls
293 ms CheckPrerequisites 3 calls
327 ms GenerateTemporaryTargetAssembly 1 calls
329 ms Clean 5 calls
460 ms MarkupCompilePass2 1 calls
627 ms ResolveAssemblyReferences 3 calls
890 ms RestorePackages 3 calls
891 ms MarkupCompilePass1 1 calls
936 ms CoreCompile 4 calls
4583 ms Rebuild 4 calls
12133 ms Setupkit 1 calls
24258 ms CompileAndTest 1 calls
您是否尝试过teamcity服务消息,然后您可以将其添加为自定义图形。我不希望更改构建脚本,我希望teamcity可以自己完成这项工作。它已经知道在每个任务中花费了多长时间,我希望它总结类似的任务并绘制一个表或图形。据我所知,不修改构建过程是不可能的,因为构建日志是以内部格式存储的(在
.BuildServer\system\messages
中)。我猜显示的持续时间是通过解析构建日志来完成的([HH:mm:ss]:\t
..)。PerfMon之所以有效,是因为监视是在流程级别完成的,每个构建步骤都在一个单独的流程中运行。我看到的唯一方法是:1)通过teamcity-info.xml或服务消息填充自定义构建指标,如James所说,2)使用自定义图表在项目统计信息中显示构建步骤的持续时间。我尝试了这一方法,显然在从命令行构建时有效,但奇怪的是,在TeamCity(v7.1.5)中将开关添加到MSBuild步骤时,不会生成相同的输出摘要。我认为您可以使用命令行生成步骤手动调用MSBuild,但我希望TeamCity能够正确处理命令行参数。