Must-share information (formatted with Markdown):
-
which versions are you using (SonarQube, Scanner, Plugin, and any relevant extension)
lts -
what are you trying to achieve
Building our .NET app in docker & azure-pipelines, we would like to publish quality report in the build. However i’m not sure how I should do this, I don’t think SonarQubePublish will help here
Example dockerfile:
...
RUN dotnet sonarscanner begin \
/o:"$SONAR_ORG" \
/k:"$SONAR_PRJ_KEY" \
/v:"$BUILD_VERSION" \
/d:sonar.host.url="$SONAR_HOST" \
/d:sonar.login="$SONAR_TOKEN" \
/d:sonar.coverageReportPaths="/testresults/SonarQube.xml" \
/d:sonar.cs.vstest.reportsPaths="/testresults/*.trx"
RUN dotnet build MyApp.sln -c Release --no-restore
RUN dotnet test MyApp.sln --logger "trx" --collect:"XPlat Code Coverage" -r /testresults --no-build -c Release
## Create the code coverage file in sonarqube format using the cobertura file generated from the dotnet test command
RUN reportgenerator "-reports:/testresults/*/coverage.cobertura.xml" "-targetdir:/testresults" "-reporttypes:SonarQube;HtmlInline_AzurePipelines;Cobertura"
RUN dotnet sonarscanner end /d:sonar.login="$SONAR_TOKEN"
...
Example azure-pipelines.yaml
...
# a custom template that runs "docker build ...' and copies the content of '/testresults' to $(System.DefaultWorkingDirectory)/TestResults
- template: steps/docker/dotnet/testV2.yml@templates
parameters:
arguments: "--build-arg SONAR_PRJ_KEY=$(SonarProject) --build-arg SONAR_PRJ_KEY=$(SonarProject) --build-arg SONAR_TOKEN=$(SonarToken)"
- task: PublishCodeCoverageResults@1
displayName: 'Publish code coverage from TestResults/**/*.cobertura.xml'
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(System.DefaultWorkingDirectory)/TestResults/Cobertura.xml'
reportDirectory: '$(System.DefaultWorkingDirectory)/TestResults'
pathToSources: '$(System.DefaultWorkingDirectory)'
...
This builds and publishes the results correctly to sonarqube, however:
How can I now use the following task (or an alternative) to have the quality report reported in the build:
# Publish Quality Gate Result task
- task: SonarQubePublish@5
inputs:
pollingTimeoutSec: '300'
As a side note:
Building / testing the app outside of Docker is undesired for us, as those tests might have (linux) dependencies like ‘ghostscript’ or other to run properly.
Installing these on the build server is unwanted behaviour for us.