从 ReportGenerator 发布代码覆盖率结果不起作用

Mar*_*eke 20 azure azure-devops azure-pipelines

我无法让我的代码覆盖率报告工作,或者更确切地说,让 DevOps 正确传递我的参数。如果我下载构建目录(在构建中压缩),则 ReportGenerator 报告可用,但不会发布。所以我知道这部分至少在起作用。:)

但是,当发布步骤运行时,它会创建新报告并使用这些报告。我的Yaml文件如下:

## Generate Reports
- task: Palmmedia.reportgenerator.reportgenerator-build-release-task.reportgenerator@4
  displayName: Generate Code Coverage Reports
  inputs:
    reports: '**\coverage.cobertura.xml'
    targetdir: 'results'
    reporttypes: 'HTML;HtmlInline_AzurePipelines;Badges;Cobertura'
    assemblyfilters: '-*tests*'
    continueOnError: true


# Publish Code Coverage Reports
- task: PublishCodeCoverageResults@1
  displayName: Publish Code Coverage Results
  inputs:
    disable.coverage.autogenerate: true
    summaryFileLocation: $(Build.SourcesDirectory)\results\cobertura.xml
    reportDirectory: $(Build.SourcesDirectory)\results
    codecoverageTool: cobertura
    continueOnError: true
Run Code Online (Sandbox Code Playgroud)

但是,当我在 Debug 中运行时,我得到以下输出:

##[debug]disable.coverage.autogenerate=undefined
Run Code Online (Sandbox Code Playgroud)

我尝试了以下选项来传递此参数:

disable.coverage.autogenerate: true
disable.coverage.autogenerate: 'true'
disable.coverage.autogenerate: 1
Run Code Online (Sandbox Code Playgroud)

他们都没有成功地将任何东西传递给任务。

如果没有设置此标志,任务将覆盖 ReportGenerator 生成的 HTML 报告并输出以下内容:

##[warning]Ignoring coverage report directory with Html content as we are auto-generating Html content
Run Code Online (Sandbox Code Playgroud)

我基于由丹尼尔·帕尔梅(ReportGenerator的作者)粘贴的信息工作在这里,以及阅读的实际代码的任务在这里

我的源代码是开源的,所以如果日志或更多信息可以帮助您提供答案,可以在这里找到。具有良好日志的构建就在这里。Yaml 文件在这里,并从项目中的各种其他存储库调用。

任何有关如何解决此问题的建议将不胜感激。

Mar*_*eke 36

好吧,在标准操作程序中,生气,在 Stack Overflow 上写一篇长篇文章,在某处找到一个金块,然后解决您自己的问题。

它不是参数,而是需要设置的环境变量。将以下内容添加到 Yaml 文件的开头即可完成。

variables:
  disable.coverage.autogenerate: 'true'
Run Code Online (Sandbox Code Playgroud)

把这个留在这里是为了拯救下一个被困在这个问题上的人几天的故障排除。:/

  • 谢谢,这帮助我发布了发布到 Azure Devops 的实际覆盖率报告,但是当单击该类时,它实际上并没有显示带有行的代码。 (2认同)

GaT*_*mas 5

以下env设置实现与接受的答案相同的结果,但范围仅限于任务。

- task: PublishCodeCoverageResults@1
  inputs:
    codeCoverageTool: 'Cobertura'
    summaryFileLocation: '$(Build.ArtifactStagingDirectory)/testresults/**/coverage.cobertura.xml'
    pathToSources: '$(System.DefaultWorkingDirectory)'
    reportDirectory: '$(Build.ArtifactStagingDirectory)/testresults/coveragereport'
    failIfCoverageEmpty: true
  env:
    DISABLE_COVERAGE_AUTOGENERATE: 'true'
  displayName: Publish code coverage results
Run Code Online (Sandbox Code Playgroud)

编辑:

我发现**上面路径中的 可能会导致找到两个覆盖 xml 文件,从而生成警告。根据您的情况,使用单个星号可能会解决这个问题。