Cake - 是否可以将我的步骤单独输出到TeamCity的统计数据?

时间:2017-06-20 17:07:11

标签: msbuild teamcity cakebuild

我正在使用Cake在TeamCity构建服务器上构建解决方案。

目前,我的构建统计信息还没有达到我想要的程度 - 例如,我可以在TeamCity的Tests选项卡中获得我的测试的总运行时间,我可以看到这些的个人运行时间在那里进行测试,以及构建的总运行时间。

但是,如果我想看一个特定步骤花费多少时间,我必须手动完成。

例如,给出以下来自执行的样本

[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  

为了快速解决问题,我使用Excel手动解析了这个问题。我可以用一个脚本来解析这个输出,但我真的不愿意!

1)蛋糕是否有办法将每个步骤输出为不同的构建步骤,以便TeamCity的图形和统计数据可以自然地组织内容?

2)如果没有,我可以将蛋糕任务结果输出到某种形式的文件吗? CSV或XML没问题,因为我至少可以下载它们,或者将它们包含在工件部分中,或者其他什么。

由于 JM

2 个答案:

答案 0 :(得分:6)

是的,这是可能的,最简单的方法可能是使用 可以从Cake.BuildSystems.Module

获取的nuget.org

使用TeamCity,它将提供:

  • 为每个已执行的任务分隔(和嵌套)构建日志
  • 当前/正在进行的构建状态已更新为当前正在运行的任务
  • 错误记录别名在构建日志输出中突出显示

安装

使用最新的引导程序

如果您正在使用最新的引导程序示例(始终在this repo中提供),则只需添加一个tools/Modules/packages.config文件,其中包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
<packages>
     <package id="Cake.BuildSystems.Module" version="0.1.2" />
</packages> 

答案 1 :(得分:5)

我在build.cake文件中执行此操作。

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 + "']");
    });
}

它有三件事:

  • 为每个已执行的任务分隔(和嵌套)构建日志
  • 当前/正在进行的构建状态已更新为当前正在运行的任务
  • 在每个步骤的持续时间内添加构建统计信息