Skip to content

Integration

Daniel Palme edited this page Nov 24, 2021 · 49 revisions

GitHub Actions

Add the GitHub Action from the Marketplace to your build pipeline.

Sample YAML code:

- name: Setup .NET Core # Required to execute ReportGenerator
  uses: actions/setup-dotnet@v1
  with:
    dotnet-version: 3.1.300

- name: ReportGenerator
  uses: danielpalme/[email protected]
  with:
    reports: 'coverage.xml' # REQUIRED # The coverage reports that should be parsed (separated by semicolon). Globbing is supported.
    targetdir: 'coveragereport' # REQUIRED # The directory where the generated report should be saved.
    reporttypes: 'HtmlInline;Cobertura' # The output formats and scope (separated by semicolon) Values: Badges, Clover, Cobertura, CsvSummary, Html, HtmlChart, HtmlInline, HtmlInline_AzurePipelines, HtmlInline_AzurePipelines_Dark, HtmlSummary, JsonSummary, Latex, LatexSummary, lcov, MHtml, PngChart, SonarQube, TeamCitySummary, TextSummary, Xml, XmlSummary
    sourcedirs: '' # Optional directories which contain the corresponding source code (separated by semicolon). The source directories are used if coverage report contains classes without path information.
    historydir: '' # Optional directory for storing persistent coverage information. Can be used in future reports to show coverage evolution.
    plugins: '' # Optional plugin files for custom reports or custom history storage (separated by semicolon).
    assemblyfilters: '+*' # Optional list of assemblies that should be included or excluded in the report. Exclusion filters take precedence over inclusion filters. Wildcards are allowed.
    classfilters: '+*' # Optional list of classes that should be included or excluded in the report. Exclusion filters take precedence over inclusion filters. Wildcards are allowed.
    filefilters: '+*' # Optional list of files that should be included or excluded in the report. Exclusion filters take precedence over inclusion filters. Wildcards are allowed.
    verbosity: 'Info' # The verbosity level of the log messages. Values: Verbose, Info, Warning, Error, Off
    title: '' # Optional title.
    tag: '${{ github.run_number }}_${{ github.run_id }}' # Optional tag or build version.

Azure DevOps (VSTS)

Azure DevOps extension

Add the Azure DevOps extension from the Marketplace to your build pipeline.
By using the Publish Code Coverage Results task you can embed the HTML report into the build results.
Please use a build agent that supports .NET Core (e.g. 'Hosted VS2017').

Sample YAML code:

- task: reportgenerator@5
  displayName: ReportGenerator
  inputs:
    reports: 'src\target\reports\coverage\coverage.opencover.xml'
    targetdir: 'src\target\reports\coverage'
    reporttypes: 'HtmlInline_AzurePipelines;Cobertura;Badges'
    assemblyfilters: '-xunit*'

Attention

The Publish Code Coverage Results task from Microsoft regenerates the report with different settings and based on the supplied Coberatura file (see announcement). Moreover it does not necessarily use the latest version of ReportGenerator.
To disable the regeneration of the report, you can use the following environment variable in your build:

disable.coverage.autogenerate: 'true'

History

If you are using Azure DevOps and want to use history function you do not have to write a custom plugin for history storage. Instead you can store the history files in Azure Artifacts as Universal Packages. So the build pipeline is something like this:

  • Get the previous history from Azure Artifacts
  • Generate the report and new history
  • Put the new history to Azure Artifacts

Your YAML pipeline might look like this sample:

variables:
  disable.coverage.autogenerate: 'true'
  codecoveragehistory.directory: '$(Build.ArtifactStagingDirectory)\history'
  codecoveragehistory.feedName: '$(Build.Repository.Name)-$(Build.SourceBranchName)'
- task: UniversalPackages@0
  displayName: Get code coverage history from Azure Artifacts
  continueOnError: true
  inputs:
    command: 'download'
    downloadDirectory: '$(codecoveragehistory.directory)'
    feedsToUse: 'internal'
    vstsFeed: 'xxxxxxx'
    vstsFeedPackage: '$(codecoveragehistory.feedName)'
    vstsPackageVersion: '0.*'
    
- task: reportgenerator@5
  displayName: 'Create Code coverage report'
  inputs:
    reports: '$(Build.SourcesDirectory)\**\coverage.cobertura.xml'
    targetdir: '$(Build.SourcesDirectory)\CodeCoverage'
    historydir: '$(codecoveragehistory.directory)'
    title: 'Merged code coverage for $(Build.Repository.Name)-$(Build.SourceBranchName)'

- task: UniversalPackages@0
  displayName: Publish code coverage history to Azure Artifacts
  inputs:
    command: 'publish'
    publishDirectory: '$(codecoveragehistory.directory)'
    feedsToUsePublish: 'internal'
    vstsFeedPublish: 'xxxxxx'
    vstsFeedPackagePublish: '$(codecoveragehistory.feedName)'
    versionOption: 'patch'
    packagePublishDescription: 'Code Coverage History for repository $(Build.Repository.Name) on branch $(Build.SourceBranchName)'
    verbosity: 'Information'

Manual setup

  1. Setup a VSTS build agent which runs on your machine: https://YOURACCOUNT.visualstudio.com/CoverageTest/_admin/_AgentQueue

  2. Commit/Push your project to VSTS.
    I created this sample project: VSTS_CoverageSample.zip
    It contains a .NET class library and a test project based on xUnit. It also contains two bat files which:

  3. Setup of build definition in VSTS. In this case I used the ".NET Desktop" template and made some modifications:

    • Removed the VsTest step
    • Added a Batch Script step after Build solution which executes the bat file with the following command: RunTests_$(BuildConfiguration).bat
      VSTS - Bat
    • Added a Publish Test Results step after Publish symbols path. This uploads the xUnit results to VSTS
      VSTS - Test results
    • Added a Publish Code Coverage Results step after Publish Test Results using the following configuration:
      VSTS - Publish code coverage
    • Overall build order:
      VSTS - Build order
  4. Execute build and see results
    VSTS - Build result

See also this article by @dotnetfer.

TeamCity

Navigate to General Settings of your Build Configuration Settings and add the following artifact path:

TARGETDIRECTORY_OF_REPORTGENERATOR/*.* => Coverage.zip

Now you can download the full report as a ZIP archive and also browse the report in TeamCity.

Jenkins

Navigate to the Configure page of your project and add the following artifact path:

TARGETDIRECTORY_OF_REPORTGENERATOR/*.*

Now you download the full report as a ZIP archive and also browse the report in Jenkins.

You can also use the HTML Publisher Plugin.

By default Jenkins is very restrictive about JavaScript. If you use the default CSP rules you will only see a static report.
If you wish to use the JavaScript based dynamic features, then you have to change the CSP settings in Jenkins.
Navigate to the Jenkins Script Console and execute the following command:

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "sandbox allow-scripts allow-same-origin; default-src 'self';")

CruiseControl .NET

See this tutorial: http://www.palmmedia.de/Blog/2012/9/27/cruisecontrol-net-integration-of-coverage-reports

Clone this wiki locally