Sonar MSBuild: получение отчетов о покрытии в Linux

Мне удалось выполнить статический анализ кода для основного проекта .NET, используя SonarQube Scanner для MSBuild в debian:stretch док-контейнере.

Сейчас я пытаюсь подготовить отчет о покрытии.

Если я не ошибаюсь, соответствующие рекомендации намекают, что вы не просто использовать существующий отчет, а следовать динамическому процессу

  • beginвыполнить анализ, указав путь к отчету (который необходимо выполнить)
  • запуск фактического покрытия с помощью одного из следующих инструментов:

а) Покрытие кода Visual Studio

б) точечное покрытие

в) Открытая крышка

  • импорт отчета
  • endпроведение анализа, инициированного msbuild

Мой вопрос в том, можно ли запустить вышеуказанный процесс в Linux (еще не удалось это сделать или найти какие-либо ресурсы)


person pkaramol    schedule 08.02.2018    source источник


Ответы (2)


Мне удалось выйти из-под покрытия (https://github.com/tonerdo/coverlet ), но до сих пор не удалось получить сонар-сканер для завершения msbuild. какая-то проблема с конфигурацией, с которой, надеюсь, я скоро разберусь.

Сценарий, который я использую:

#!/bin/bash -e

api_key=$API_KEY

# Get nuget packages and then build DEBUG
dotnet restore --packages packages --configfile nuget.config /nowarn:NU1701,NU1603,NU1605 MyApp.sln

# set the version on all the projects
echo Set SDK Versions to [$apiversion]
find sdk -name "*.csproj" -print | xargs -I £ sed -ie "s/<Version>.*<\/Version>/<Version>${apiversion}<\/Version>/g" £

echo Set Implementation Versions to [$version]
find implementation -name "*.csproj" -print | xargs -I £ sed -ie "s/<Version>.*<\/Version>/<Version>${version}<\/Version>/g" £

echo Starting SONAR...
export token=$SONAR_TOKEN

dotnet /bin/SonarScanner.MSBuild.dll begin \
    /d:sonar.login=${token}  \
    /d:sonar.host.url=https://my-sonar-server.com \
    /v:$version \
    /k:$key \
    /d:sonar.analysis.mode=preview \
    /d:sonar.cs.opencover.reportsPaths="$(find . -name coverage.xml | tr '\n' ',')" \
    /d:sonar.coverage.exclusions=tests/** \
    /d:sonar.cs.vstest.reportsPaths="$(pwd)/.output/*.trx" \
    /d:sonar.verbose=true

echo Build solution...
dotnet build --no-restore /nowarn:NU1701,NU1603,NU1605 Core.sln /clp:PerformanceSummary

# Run the tests
for testproj in $(ls tests/*.Tests -d); do 
    echo $testproj; 
    set +e
    time \
        dotnet test \
            --no-build \
            --no-restore \
            --filter "TestCategory!=Integration" \
            --logger:trx \
            -r .output/ \
            $testproj \
            /nowarn:NU1701,NU1603,NU1605 \
            /p:CollectCoverage=true \
            /p:CoverletOutputFormat=opencover
    set -e
done

dotnet /bin/SonarScanner.MSBuild.dll end /d:sonar.login=$token

Вам необходимо ссылаться на Coverlet в каждой из ваших тестовых сборок.

person pms1969    schedule 03.04.2018

Отчеты о покрытии, а также интеграция SonarQube возможны благодаря minicover.

Minicover теперь использует mini-OpenCover для создания (и загрузки на сервер SQ) отчетов о покрытии, совместимых с SQ; Процедура, которой следует следовать более или менее, заскриптована:

(при условии, что tools — это папка, которая выполняет установку самородка для мини-обложки)

echo "Starting sonarqube integration"
mono /home/pathTo/SonarQube.Scanner.MSBuild.exe begin /k:"MyProject" /d:sonar.host.url="http://localhost:9000" /d:sonar.login="myLoginId" /d:sonar.cs.opencover.reportsPaths="coverage.xml"


dotnet restore
dotnet build
cd tools

export "MiniCover=dotnet minicover"

# Instrument assemblies inside 'MyTestFolder' folder to detect hits for source files inside 'MySrcFolder' folder
$MiniCover instrument --workdir ../ --assemblies MyTestFolder/**/bin/**/*.dll --sources MySrcFolder/**/*.cs 

# Reset hits count in case minicover was run for this project  
$MiniCover reset

cd ..    

dotnet test --no-build ./MyTestFolder/MyTest.csproj

cd tools    
# Uninstrument assemblies, it's important if you're going to publish or deploy build outputs
$MiniCover uninstrument --workdir ../

# Create html reports inside folder coverage-html
$MiniCover opencoverreport --workdir ../ --threshold 90

# Print opencover report
$MiniCover opencoverreport --workdir ../ --threshold 90

cd ..
echo "Ending sonarqube integration..."
mono /home/pathTo/SonarQube.Scanner.MSBuild.exe end /d:sonar.login="myLoginId"

Более подробное обсуждение/подробности можно найти на этом и этой темы.

person pkaramol    schedule 03.04.2018