TeamCity dotCover报告Sonar的路径

时间:2012-11-01 04:02:37

标签: teamcity sonarqube dotcover sonar-runner teamcity-7.1

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

我的下一步是声纳 - 跑步者。当前存在的配置是; gallio.mode = dotCover,sonar.gallio.mode = reuseReport但我也需要sonar.gallio.reports.path。

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

7 个答案:

答案 0 :(得分: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可以通过reuseReport获取Gallio测试报告,TeamCity会自动检测测试结果。

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

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

要将覆盖信息转换为Sonar可使用的格式,您需要使用dotCover报告命令和undocumented report type TeamCityXML

& dotCover report /Source=coverage.snapshot /Output=coverage-report.xml /ReportType=TeamCityXML

答案 1 :(得分:3)

在同一问题上花了一些时间,但是使用较新的Sonar c#插件(v.2.3) - Gallio支持已被删除,但报告仍然是必需的。

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

程序是:

  1. 在测试和覆盖步骤之后,在Team City中创建PowerShell构建步骤
    • 如果您愿意,可以使用命令行
  2. 在临时文件夹中获取完整的dotCover 快照名称
  3. 运行dotCover以从快照生成HTML报告
    • 注意 - Sonar(c#plugin v 2.3)仅支持dotCover HTML报告
  4. 将生成的HTML报告传递给sonar
  5. 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中已定义的属性

答案 2 :(得分:2)

看来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"

答案 3 :(得分:1)

nunit / dotcover构建步骤的覆盖率报告存储在teamcity hidden artifacts目录中。您需要在声纳步骤中将其添加为工件依赖项。我不建议隐藏的神器路线,但它可以完成。

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

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

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

答案 4 :(得分: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)

答案 5 :(得分:0)

下面是对我有用的。我使用的是TC 2018.2.4,捆绑版的dotCover没有生成任何内容,因此我也将其升级到了最新版本,即2019.1.1

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

我也不想使用temp文件夹,因为该版本正在将内容删除。

$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%"

答案 6 :(得分:0)

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

  1. 使用
  2. 运行SonarScanner.MSBuild.exe begin命令s pecifying the temp build directory to be where the reports will be available
   /d:sonar.cs.dotcover.reportsPaths="%system.teamcity.build.tempDir%".
  1. 使用MSBuild构建项目

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

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