Reputation: 340
I am using Cake to build a solution on a TeamCity build server.
Currently, my build statistics are not at the point where I'd like them to be - for example, I can obtain total runtime for my tests in the Tests tab in TeamCity, and I can see the individual running time for these tests there, as well as the total run time of the build.
However, if I'd like to see how much time a particular step has been taking over time, I'd have to do it manually.
For example, given the below sample from an execution
[17:09:22] [Step 1/1] Clean 00:00:00.0301134
[17:09:22] [Step 1/1] Update-Version 00:00:00.0826397
[17:09:22] [Step 1/1] Restore-Node-Packages 00:00:32.2691674
[17:09:22] [Step 1/1] Restore-NuGet-Packages 00:00:09.2550592
[17:09:22] [Step 1/1] Build-UI 00:00:07.4544697
[17:09:22] [Step 1/1] Build 00:04:12.2181356
For a quick fix, I manually parsed this using Excel. I could wrangle up a script to parse this output, but I'd really rather not!
1) Is there a way for cake to output each step as a different build step so that TeamCity's graphs and statistics can naturally organize things?
2) If not, can I output the cake task results to some form of file? A CSV or XML would be fine, because I could at least go download them, or include them in the artifacts section, or something.
Thanks JM
Upvotes: 3
Views: 1060
Reputation: 928
I do this on my build.cake file.
if (TeamCity.IsRunningOnTeamCity)
{
// This block makes the teamcily log collapsible by Task
TaskSetup(ctx => TeamCity.WriteStartBlock(ctx.Task.Name));
TaskTeardown(ctx =>
{
TeamCity.WriteEndBlock(ctx.Task.Name);
// This service message makes the Tasks duration visible as a statisticValue
var duration = ctx.Duration.TotalMilliseconds.ToString("0");
Information("##teamcity[buildStatisticValue key='Block." + ctx.Task.Name + ".Duration' value='" + duration + "']");
});
}
It does 3 things:
Upvotes: 6
Reputation: 5010
Yes this is possible, the easiest way is probably using the Cake.BuildSystems.Module which can be fetched from nuget.org
With TeamCity it will provide :
If you're using the latest bootstrapper example (always available in this repo), you can simply add a tools/Modules/packages.config
file with the following contents:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Cake.BuildSystems.Module" version="0.1.2" />
</packages>
Upvotes: 6