Sonar results overwriting each other

I have a azure repo called ‘abc’ which has two folders under services kdirectory ‘services/project1 and services/project2’

I run sonarprepare, sonaranalyze, sonarpublish for both the projects seaparately in a job like below.

- job: 
    displayName: Code Quality Project1
    steps:

    - task: Maven@4
      displayName: mvn install
      inputs:
        mavenPomFile: 'services/Project1/pom.xml'
        goals: 'clean verify'
        publishJUnitResults: true
        javaHomeOption: 'JDKVersion'
        jdkVersionOption: '17'
        mavenVersionOption: 'Default'
        mavenAuthenticateFeed: true
        effectivePomSkip: true
        sonarQubeRunAnalysis: false
        checkStyleRunAnalysis: true
        options: -B -ntp
    
    - task: SonarQubePrepare@5
      inputs:
        SonarQube: $(sonarqubeServiceConnectionName)
        scannerMode: 'CLI'
        configMode: 'manual'
        cliProjectKey: $(sonarqubeProjectKey)
        cliProjectVersion: $(Build.BuildNumber)
        cliSources: $(System.DefaultWorkingDirectory)/services/project1
        extraProperties: |
          sonar.java.binaries=$(System.DefaultWorkingDirectory)/services/project1/**/target/classes
          sonar.coverage.jacoco.xmlReportPaths=$(System.DefaultWorkingDirectory)/services/project1/aldi-nord-codecoverage-aggregator/target/site/jacoco-aggregate/jacoco.xml
          sonar.coverage.exclusions=**/test/**
          sonar.junit.reportPaths=$(System.DefaultWorkingDirectory)/services/project1/**/target/surefire-reports
          sonar.java.checkstyle.reportPaths=$(System.DefaultWorkingDirectory)/services/project1/target/checkstyle-result.xml

    - task: SonarQubeAnalyze@5

    - task: SonarQubePublish@5
      inputs:
        pollingTimeoutSec: '300'

  - job: 
    displayName: Code Quality Project2
    steps:

    - task: Maven@4
      displayName: mvn install
      inputs:
        mavenPomFile: 'services/Project2/pom.xml'
        goals: 'clean verify'
        publishJUnitResults: true
        javaHomeOption: 'JDKVersion'
        jdkVersionOption: '17'
        mavenVersionOption: 'Default'
        mavenAuthenticateFeed: true
        effectivePomSkip: true
        sonarQubeRunAnalysis: false
        checkStyleRunAnalysis: true
        options: -B -ntp

    - task: SonarQubePrepare@5
      inputs:
        SonarQube: $(sonarqubeServiceConnectionName)
        scannerMode: 'CLI'
        configMode: 'manual'
        cliProjectKey: $(sonarqubeProjectKey)
        cliProjectVersion: $(Build.BuildNumber)
        cliSources: $(System.DefaultWorkingDirectory)/services/Project2
        extraProperties: |
          sonar.java.binaries=$(System.DefaultWorkingDirectory)/services/Project2/target/classes
          sonar.coverage.jacoco.xmlReportPaths=$(System.DefaultWorkingDirectory)/services/Project2/target/site/jacoco/jacoco.xml
          sonar.junit.reportPaths=$(System.DefaultWorkingDirectory)/services/Project2/target/surefire-reports
          sonar.coverage.exclusions=**/test/**

    - task: SonarQubeAnalyze@5

    - task: SonarQubePublish@5
      inputs:
        pollingTimeoutSec: '300'

In the extension page, When one of the analysis is complete and while the other build was running, I see one report is created which shows result for project2 code (finished first).
When the project1 steps are completed, the project 2 report is overwritten with project 1’s result.
Anyways I see two reports under extenstions in azure devops, but both has same code project1.

I want two reports generated for the repository for project 1 and project 2 showing respective results. Is it possible.

Hi!

It seems that you use sonar plain scanner instead of the Maven scanner. Is there any reason for that?

Take a look at the SonarScanner for Maven

Try to keep it simple by just calling the goals “sonar:sonar” and let Maven configure all your properties for you (binaries, coverage, etc.).

Additionally, take a look at your “cliProjectKey” parameter because it seems that you are using the same value for both projects tasks:

        cliProjectKey: $(sonarqubeProjectKey)

Best regards.

1 Like