代码之家  ›  专栏  ›  技术社区  ›  Antti Simonen

VSTS的SonarQube代码覆盖范围

  •  4
  • Antti Simonen  · 技术社区  · 6 年前

    我正在使用VSTS托管代理VS2017来运行构建、测试和SonarQube分析。我正在使用市场上的SonarQube扩展( https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarqube ). 正在使用的任务版本为4,它使用SonarQube Scanner for MSBuild 4.0.2。

    分析工作正常,但它无法将代码覆盖率结果转换为SonarQube。我可以在VSTS(构建细节)中看到代码覆盖率分析,但在SonarQube中看不到。

    据我所知,问题是VSTS生成了一个具有扩展名的二进制文件。编码覆盖。SonarQube不知道如何处理这个文件。我很难将其转换为XML格式,因为我似乎没有办法这样做。

    是否有人将VSTS成功地用于SonarQube,并将代码覆盖率结果也提供给SonarQube?您是如何设置的?

    编辑1
    我使用的SonarQube版本是:版本6.7(内部版本33306),社区版

    编辑2
    分析结束时实际上会生成xml文件,如下面的注释所述。这来自日志:

    2018-03-06T11:14:56.4189055Z 11:14:56.417  Attempting to locate the 
    CodeCoverage.exe tool...
    2018-03-06T11:14:56.4210147Z 11:14:56.42  Attempting to locate the 
    CodeCoverage.exe tool using setup configuration...
    2018-03-06T11:14:56.4345085Z 11:14:56.433  Code coverage command line tool: 
    C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Team 
    Tools\Dynamic Code Coverage Tools\CodeCoverage.exe
    2018-03-06T11:14:56.4349101Z 11:14:56.434  Fetching code coverage report 
    information from TFS...
    2018-03-06T11:14:56.4363869Z 11:14:56.435  Attempting to locate a test 
    results (.trx) file...
    2018-03-06T11:14:57.0458245Z 11:14:57.044  Looking for TRX files in: 
    D:\a\1\TestResults, D:\a\1\s\TestResults
    2018-03-06T11:14:57.0462747Z 11:14:57.045  Located a test results file: 
    D:\a\1\s\TestResults\VssAdministrator_factoryvm-az436_2018-03-
    06_11_13_09.trx
    2018-03-06T11:14:57.0600587Z 11:14:57.059  One code coverage attachment was 
    found in the trx file: factoryvm-az436\VssAdministrator_factoryvm-az436 
    2018-03-06 11_11_34.coverage
    2018-03-06T11:14:57.0602504Z 11:14:57.059  Absolute path to coverage file: 
    D:\a\1\s\TestResults\VssAdministrator_factoryvm-az436_2018-03-
    06_11_13_09\In\factoryvm-az436\VssAdministrator_factoryvm-az436 2018-03-06 
    11_11_34.coverage
    2018-03-06T11:14:57.0691948Z 11:14:57.068  Executing file C:\Program Files 
    (x86)\Microsoft Visual Studio\2017\Enterprise\Team Tools\Dynamic Code 
    Coverage Tools\CodeCoverage.exe
    2018-03-06T11:14:57.0692731Z   Args: analyze 
    /output:D:\a\1\s\TestResults\VssAdministrator_factoryvm-az436_2018-03-
    06_11_13_09\In\factoryvm-az436\VssAdministrator_factoryvm-az436 2018-03-06 
    11_11_34.coveragexml D:\a\1\s\TestResults\VssAdministrator_factoryvm-
    az436_2018-03-06_11_13_09\In\factoryvm-az436\VssAdministrator_factoryvm-
    az436 2018-03-06 11_11_34.coverage 
    2018-03-06T11:14:57.0694963Z   Working directory: 
    D:\a\1\s\TestResults\VssAdministrator_factoryvm-az436_2018-03-
    06_11_13_09\In\factoryvm-az436
    2018-03-06T11:14:57.0695792Z   Timeout (ms):60000
    2018-03-06T11:14:57.0699007Z   Process id: 3540
    2018-03-06T11:14:58.7847582Z 11:14:58.783  Process returned exit code 0
    2018-03-06T11:14:58.7858908Z 11:14:58.784  Updating project info files with 
    code coverage information...
    
    3 回复  |  直到 6 年前
        1
  •  7
  •   Fabrice - SonarSource Team    6 年前

    VSTS扩展应该自动导入覆盖率结果,但目前有一个回归很快就会得到修复(希望如此): SONARMSBRU-339

    同时,在 VSTS extension documentation in "Analysing a .NET solution" :在中 Additional Properties 文本区域,添加以下属性:

    sonar.cs.vscoveragexml.reportsPaths=**/*.coveragexml
    
        2
  •  3
  •   Alex    5 年前

    即使设置了“sonar”,我也无法看到“coveragexml”文件。verbose=true','系统。调试=真'。尽管如此,我还是找到了另一种很好的方法,即转换' .覆盖范围“文件到” .PowerShell脚本的Coverage XML:

    Get-ChildItem -Path $(Agent.TempDirectory) -Include "*.coverage" -File -Recurse | % {
    $outfile = "$([System.IO.Path]::GetFileNameWithoutExtension($_.FullName)).coveragexml"
    $output = [System.IO.Path]::Combine([System.IO.Path]::GetDirectoryName($_.FullName), $outfile)
    "Analyse '$($_.Name)' with output '$outfile'..."
    .$env:USERPROFILE\.nuget\packages\microsoft.codecoverage\15.8.0\build\netstandard1.0\CodeCoverage\CodeCoverage.exe analyze /output:$output $_.FullName
    }
    

    要使其正常工作,请确保为市场安装了“内联PowerShell”任务,并将其放在构建管道中的“运行代码分析”步骤之前。

        3
  •  1
  •   Antoine Robin    5 年前

    对于使用自托管代理的用户,还可以安装 Visual Studio Test Agent 2019 .

    它包含一个CodeCoverage。exe文件SonarQubeAnalyze@4Azure DevOps任务将找到。SonarQube将能够转换。覆盖率文件。Coverage XML,根据这个 SonarQube documentation webpage .

    Visual Studio测试代理似乎是免费的。无需支付Visual Studio Enterprise的费用。