Build dotnet projects and provide SonarQube analysis using SonarQube MSBuild Scanner.
474
This is a container used to build dotnet projects and provide SonarQube analysis using SonarQube MSBuild Scanner.
It also allows you to run Docker in Docker using a docker.sock mount.
This image was built with the following components:
Tags are written using the following pattern: dotnet-sonar:<year>.<month>.<revision>
More info on docker hub: https://hub.docker.com/r/nosinovacao/dotnet-sonar/
Full documentation: https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+MSBuild
Inside container:
dotnet /sonar-scanner/SonarScanner.MSBuild.dll begin /k:sonarProjectKey
dotnet build
dotnet /sonar-scanner/SonarScanner.MSBuild.dll end
Outside container:
docker run -it --rm -v <my-project-source-path>:/source nosinovacao/dotnet-sonar:latest bash -c "cd source \
&& dotnet /sonar-scanner/SonarScanner.MSBuild.dll begin /k:sonarProjectKey /name:sonarProjectName /version:buildVersion \
&& dotnet restore \
&& dotnet build -c Release \
&& dotnet /sonar-scanner/SonarScanner.MSBuild.dll end"
The following pipeline code will:
node('somenode-with-docker') {
withSonarQubeEnv('my-jenkins-configured-sonar-environment') {
docker.image('nosinovacao/dotnet-sonar:latest').inside() {
withEnv(['HOME=/tmp/home','DOTNET_CLI_TELEMETRY_OPTOUT=1']) {
stage('build') {
checkout scm
sh "dotnet /sonar-scanner/SonarScanner.MSBuild.dll begin /k:someKey /name:someName /version:someVersion"
sh "dotnet build -c Release /property:Version=someVersion"
sh "rm -drf ${env.WORKSPACE}/testResults"
sh (returnStatus: true, script: "find tests/**/* -name \'*.csproj\' -print0 | xargs -L1 -0 -P 8 dotnet test --no-build -c Release --logger trx --results-directory ${env.WORKSPACE}/testResults")
step([$class: 'XUnitPublisher', testTimeMargin: '3000', thresholdMode: 1, thresholds: [[$class: 'FailedThreshold', unstableThreshold: '0']
, [$class: 'SkippedThreshold']], tools: [[$class: 'MSTestJunitHudsonTestType', deleteOutputFiles: true, failIfNotNew: false
, pattern: 'testResults/**/*.trx', skipNoTestFiles: true, stopProcessingIfError: true]]])
sh "dotnet /sonar-scanner/SonarScanner.MSBuild.dll end"
}
}
}
}
}
timeout(time: 1, unit: 'HOURS') {
def qualityGate = waitForQualityGate()
if (qualityGate.status == 'ERROR') {
currentBuild.result = 'UNSTABLE'
}
}
If you want to use Docker in Docker:
Please note that if you want to use Docker inside Docker (DinD) you need to perform additional actions when mounting the docker image in the pipeline.
The following actions will expose your host to several security vulnerabilities and therefore this should only be used when you absolutely must to:
docker.image('nosinovacao/dotnet-sonar:latest').inside("--group-add docker -v /var/run/docker.sock:/var/run/docker.sock") {
// Some stuff
docker.image.('hello-world:latest').inside() {
sh "echo 'hello from docker inside docker'"
}
}
The above code will:
Due to dotnet tool limitations, it is not possible to provide a test coverage report yet.
Content type
Image
Digest
Size
848.8 MB
Last updated
over 8 years ago
docker pull timothystewart6/dotnet-sonar