TeamCity dotCover声纳报告路径

TeamCity dotCover声纳报告路径,teamcity,sonarqube,dotcover,sonar-runner,teamcity-7.1,Teamcity,Sonarqube,Dotcover,Sonar Runner,Teamcity 7.1,我正在尝试将声纳分析集成到TeamCity的构建过程中。我有一个NUnit构建步骤,它运行我的单元测试,然后为覆盖率运行dotCover 我的下一步是声纳赛跑。当前存在的配置为;gallio.mode=dotCover,sonar.gallio.mode=reuse报告,但我还需要sonar.gallio.reports.path 有人知道上一步中生成的dotCover报告的路径吗?我找不到使用内置NUnit runner的方法。通过使用powershell构建步骤手动调用所需的命令,我成功地使

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

我的下一步是声纳赛跑。当前存在的配置为;gallio.mode=dotCover,sonar.gallio.mode=reuse报告,但我还需要sonar.gallio.reports.path


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

我找不到使用内置NUnit runner的方法。通过使用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
Gallio测试报告可由Sonar通过reuseReport获取,TeamCity会自动检测测试结果

您可以通过在标准输出中写入以下命令,使TeamCity直接处理覆盖率快照:

Write-Host "##teamcity[importData type='dotNetCoverage' tool='dotcover' path='coverage.snapshot']"
要将覆盖率信息转换为Sonar可用的格式,您需要使用dotCover报告命令和:


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

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

%env.TEAMCITY\u DATA\u PATH%/system\artifacts\***\%TEAMCITY.build.id%\.TEAMCITY\.NETCoverage\dotCover.snapshot


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

在同一个问题上花了一些时间,但使用了较新的Sonar c#plugin(v.2.3)-Gallio支持已经取消,但仍然需要报告

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

程序如下:
  • 在步骤完成后,在Team City中创建一个PowerShell构建步骤,包括测试和覆盖率
    • 如果愿意,可以使用命令行
  • 在临时文件夹中获取完整的dotCover快照名称
  • 运行dotCover从快照生成HTML报告
    • 注意-Sonar(c#插件V2.3)仅支持dotCover HTML报告
  • 将生成的HTML报告传递给sonar
  • PowerShell脚本:
    现在,您可以在sonnar runner中将报告指定为
    sonar.cs.dotcover.reportspath='%sonar.coverageReport%'


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

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

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

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


    (在SonarQube 5、dotCover 2.7、TC8上试用过)

    看来TeamCity 2017不再创建覆盖率数据文件。而是创建*.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”

    下面的内容对我有效。我使用的是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%"
    
    我们正在使用并且需要将team city临时构建路径添加到开始步骤

  • 运行SonarScanner.MSBuild.exe begin命令,使用
  • /d:sonar.cs.dotcover.reportsPaths=“%system.teamcity.build.tempDir%”。
    
  • 使用MSBuild生成项目

  • 运行测试工具,指示它在前面为MSBuild运行程序指定的相同位置生成报告

  • 运行SonarScanner.MSBuild.exe end命令


  • 对我来说不起作用,此解决方案生成一个html文件,其正文为空:-(请参阅:您将%sonar.coverageReport%设置为什么?
    $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%"
    
    $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%"