12

我正在尝试将声纳分析集成到 TeamCity 构建过程中。我有一个 NUnit 构建步骤,它运行我的单元测试,然后运行 ​​dotCover 进行覆盖。

我的下一步是声纳运行器。当前存在的配置是;gallio.mode=dotCover, sonar.gallio.mode=reuseReport 但我还需要 sonar.gallio.reports.path。

有人知道上一步生成的 dotCover 报告的路径吗?

4

7 回答 7

5

在同一问题上花费了一些时间,但使用了较新的 Sonar c# 插件 (v.2.3) - 已放弃对 Gallio 的支持,但仍需要报告。

为了直接回答这个问题,TeamCity 将 dotcover快照文件放入一个名为coverage_dotcover27574681205420364801.data(其中数字是随机的)的临时文件夹中。所以

程序是:

  1. 在包含测试和覆盖的步骤之后,在 Team City 中创建一个 PowerShell 构建步骤
    • 如果您愿意,可以使用命令行
  2. 在临时文件夹中获取完整的 dotCover快照名称
  3. 运行 dotCover 以从快照生成 HTML 报告
    • 注意 - Sonar (c# plugin v 2.3) 仅支持 dotCover HTML 报告
  4. 将生成的 HTML 报告传递给声纳

PowerShell 脚本:

$snapshot = Get-ChildItem "%system.teamcity.build.tempDir%" `
     -Filter coverage_dotcover*.data `
     | select -ExpandProperty FullName -First 1

%teamcity.dotCover.home%\dotCover.exe report `
    /ReportType=HTML /Source="$snapshot" `
    /Output="%sonar.coverageReport%"

现在您可以在 Sonnar runner 中指定您的报告为sonar.cs.dotcover.reportsPaths='%sonar.coverageReport%'

其中 %sonar.coverageReport% 是 TeamCity 中定义的属性

于 2014-11-26T15:53:39.693 回答
5

TeamCity 2017 似乎不再创建 coverage_dotcover*.data 文件。相反,它会创建 *.dcvr 文件。

在创建报告之前,可能需要合并多个文件。因此,powershell 需要更新。

因此,使用Oleksandr提供的步骤,只需将脚本更新为:

$snapshotfiles = Get-ChildItem "%system.teamcity.build.tempDir%" `
 -recurse -Filter *.dcvr `
 | select -ExpandProperty Name

$snapshots = $snapshotfiles -join ";"

%teamcity.dotCover.home%\dotCover.exe merge /Source=$snapshots 
/Output=dotcovermerge.dcvr

%teamcity.dotCover.home%\dotCover.exe report `
/ReportType=HTML /Source=dotcovermerge.dcvr `
/Output="%sonar.coverageReport%"

然后可以将属性 %sonar.coverageReport% 传递给 sonarqube 扫描仪。顺便说一句,您需要在 TC 中为 %sonar.coverageReport% 创建一个参数,例如“sonarcoverage.html”

于 2017-06-22T04:43:55.713 回答
4

我找不到使用内置 NUnit 运行器的方法。我设法通过使用 powershell 构建步骤手动调用所需的命令来使其工作。

第一步是在 dotCover 封面调用中通过 Gallio 运行 NUnit 测试:

& dotCover cover `
/TargetExecutable="C:\Program Files\Gallio\bin\Gallio.Echo.exe" `
/TargetArguments="/report-type:XML /report-name-format:test-report /runner:IsolatedProcess /report-directory:.\Gallio .\Path\Test.dll" `
/Filters="+:WhatToCover" `
/Output=coverage.snapshot

然后,Sonar 可以使用重用报告获取 Gallio 测试报告,TeamCity 会自动检测测试结果。

您可以通过将服务消息写入标准输出来使 TeamCity 直接处理覆盖快照:

Write-Host "##teamcity[importData type='dotNetCoverage' tool='dotcover' path='coverage.snapshot']"

要将覆盖信息转换为 Sonar 可用的格式,您需要使用 dotCover 报告命令和未记录的报告类型 TeamCityXML

& dotCover report /Source=coverage.snapshot /Output=coverage-report.xml /ReportType=TeamCityXML
于 2012-11-02T10:07:59.867 回答
2

我们正在为 MSBuild 使用 SonarScanner,并且需要将团队城市临时构建路径添加到开始步骤。

  1. 运行 SonarScanner.MSBuild.exe 开始命令,将临时构建目录指定为报告可用的 位置
   /d:sonar.cs.dotcover.reportsPaths="%system.teamcity.build.tempDir%".
  1. 使用 MSBuild 构建项目

  2. 运行您的测试工具,指示它在之前为 MSBuild SonarQube Runner 指定的相同位置生成报告

  3. 运行 SonarScanner.MSBuild.exe 结束命令

于 2019-07-25T11:08:21.660 回答
1

nunit/dotcover 构建步骤的覆盖率报告存储在 teamcity 隐藏工件目录中。您需要在声纳步骤中将其添加为工件依赖项。我不会推荐隐藏的工件路线,但可以做到。

这是我用来发布报告的工件路径,它工作了几周然后开始失败:

%env.TEAMCITY_DATA_PATH%/system\artifacts\**\%teamcity.build.id%\.teamcity\.NETCoverage\dotCover.snapshot

一旦你有了报告,你就可以免费回家了。

于 2014-10-24T23:44:34.810 回答
1

虽然这可能是一个有点麻烦的解决方案,但我正在使用两个链式构建。

第一个构建配置构建解决方案并运行测试/覆盖,并将 dotCover 快照保存为工件。

另一个构建依赖于第一个构建.teamcity/.NETCoverage/dotCover.snapshot并运行 "C:\Program Files (x86)\JetBrains\dotCover\v2.7\bin\dotCover.exe" report /ReportType=HTML /Source="dotCover.snapshot" /Output="dotCover.html",并且作为最新步骤,执行 SonarRunner(您的项目属性文件将指向“dotCover.html”)。

(尝试使用 SonarQube 5、dotCover 2.7、TC8)

于 2015-05-10T09:37:25.027 回答
0

以下是对我有用的。我在 TC 2018.2.4 上,dotCover 的捆绑版本没有生成任何东西,所以我也将它升级到了最新版本,即 2019.1.1

我无法让代理使用最新版本的 dotcover 工具,因此我必须为此构建文件夹路径,而不是使用默认的 %teamcity.dotCover.home% 变量。

我也不想使用临时文件夹,因为那里的东西被构建删除了。

$snapshot_file_list = Get-ChildItem "%system.teamcity.build.tempDir%" -recurse -Filter coverage_dotcover*.data | select -ExpandProperty FullName
Echo "dotCover Snapshot files"
Echo $snapshot_file_list
$joined_snapshot_files = $snapshot_file_list -join ";"
Echo "Merging data files to %system.teamcity.build.checkoutDir%\dotcovermerge.dcvr"
& "%teamcity.agent.tools.dir%\JetBrains.dotCover.CommandLineTools.2019.1.1\dotCover.exe" merge /Source=$joined_snapshot_files /Output="%system.teamcity.build.checkoutDir%\dotcovermerge.dcvr" /LogFile="%system.teamcity.build.checkoutDir%\dotCover.log"
Echo "Generating dotCover Html report"
Echo "%system.teamcity.build.checkoutDir%\%sonar.coverageReport%"
& "%teamcity.agent.tools.dir%\JetBrains.dotCover.CommandLineTools.2019.1.1\dotCover.exe" report /ReportType=HTML /Source="%system.teamcity.build.checkoutDir%\dotcovermerge.dcvr" /Output="%system.teamcity.build.checkoutDir%\%sonar.coverageReport%"
于 2019-05-28T12:07:06.083 回答