Alex Planchon
Alex Planchon

Reputation: 379

Azure Devops + Coverlet + SonarQube shows 0%

Good morning,

Sorry to bother you, I have a problem and I have no leads.

I have a pipeline on Azure DevOps where I use coverlet to generate a code coverage report when I use the command "dotnet test".

enter image description here

Indeed, the report is well generated.

enter image description here

At first, in the "Prepare analysis on SonarQube" step, I set the variable "sonar.cs.opencover.reportsPaths="$(Agent.TempDirectory)/coverage.opencover.xml".

enter image description here

And yet the end in my SonarQube there is 0% code coverage... I don't know what to do or any leads...

enter image description here

Thanks

Upvotes: 6

Views: 3050

Answers (2)

Alex Planchon
Alex Planchon

Reputation: 379

I did a lot of things to finally managed to get the coverage working but I think that the problem was the "ProjectGUID" missing in each .csproj of my solution making the projects ignored by SonarQube scanner.

I also upgraded from SonarQube 6.2 to 8.1 at the same time which may have solved the problem.

My steps remained unchanged to make this work.

Upvotes: 0

Levi Lu-MSFT
Levi Lu-MSFT

Reputation: 30313

I cannot reproduce above issue. And it is hard to troubleshoot since you did not share your configuration for dotnet test task or sonarqube prepare task.

I created a test project and the coverage was successfully published to my sonarqube server. You can refer to below my steps.

1, create sonarqube server and configure my projectName and projectKey (I use azure sonarqube container instance, check here for details).

2, configure sonarqube service connection in azure devops.

3, create build pipeline. I use yaml pipeline.

In Prepare Analysis Configuration task, I choose to Use standalone scanner, and Mode is Manually provide configure. And I set variable sonar.cs.opencover.reportsPaths="$(Agent.TempDirectory)/coverage.opencover.xml".

Below screenshot is the task's setting in classic ui view.

enter image description here

In my dotnet test task I set the arguments as below, and specifically output the coverage result to $(Agent.TempDirectory)/ folder.

arguments: '--configuration $(buildConfiguration) /p:CollectCoverage=true /p:CoverletOutput=$(Agent.TempDirectory)/ /p:CoverletOutputFormat=opencover'

Below is the full content of my azure-pipelines.yml file.

trigger: none

jobs:
- job: 'Tests'
  pool: 
    vmImage: windows-latest

  variables:
    buildConfiguration: 'Release'
  continueOnError: true

  steps:     
  - task: SonarQubePrepare@4
    displayName: 'Prepare analysis on SonarQube'
    inputs:
       SonarQube: sonarlevi
       scannerMode: CLI
       configMode: manual
       cliProjectKey: myproject2
       cliProjectName: myproject2
       extraProperties: |
          sonar.cs.opencover.reportsPaths="$(Agent.TempDirectory)/coverage.opencover.xml"


  - task: DotNetCoreCLI@2
    inputs:
      command: restore
      projects: '**\*.csproj'

  - task: DotNetCoreCLI@2
    inputs:
      command: custom
      custom: tool
      arguments: install --tool-path . dotnet-reportgenerator-globaltool 
    displayName: Install ReportGenerator tool

  - task: DotNetCoreCLI@2
    displayName: Test .NET
    inputs:
      command: test
      projects: '**\*Test*.csproj'
      publishTestResults: false
      arguments: '--configuration $(buildConfiguration) /p:CollectCoverage=true /p:CoverletOutput=$(Agent.TempDirectory)/ /p:CoverletOutputFormat=opencover'
    condition: succeededOrFailed()


  - task: SonarQubeAnalyze@4

    displayName: 'Run Code Analysis'

  - task: SonarQubePublish@4

    displayName: 'Publish Quality Gate Result'   

Upvotes: 3

Related Questions