Программные исключения покрытия в SonarQube MSBuild runner

Есть ли способ программно исключить артефакты из анализа Sonar с помощью сканера MSBuild?

У нас есть несколько различных решений Visual Studio в нашем репозитории git. Почти все эти решения используют проекты, содержащие общий код. Я хочу исключить покрытие кода из этих общих проектов, но только для некоторых проектов Sonar.

Всегда исключать проект просто и задокументировано путем добавления раздел <PropertyGroup> в разделе .csproj.

Добавление аргумента /d:sonar.coverage.exclusions="**/MyCommonCode/**" в сканер MSBuild, по-видимому, ничего не дает, равно как и добавление шаблонов исключения в самом Sonar.

Обоснование

Я хочу поддерживать точные показатели покрытия кода для кода, использующего эти общие проекты. Если бы общий код содержал 100 000 строк и был хорошо протестирован, а мой проект содержал бы только 10 000 строк и не содержал бы тестов, покрытие кода Sonar было бы искусственно благоприятным.

Вместо этого я намерен создать отдельный проект Sonar, содержащий только покрытие этого общего кода.

Мы используем SonarQube 7.0 и SonarScanner для MSBuild 4.0.2.


person nullPainter    schedule 24.05.2018    source источник
comment
Возможный дубликат stackoverflow.com/questions/34010376/   -  person nullPainter    schedule 24.05.2018


Ответы (1)


Вы можете добавить условие к фрагменту MSBuild, на который вы ссылались, и использовать его, чтобы контролировать, включены ли общие проекты в анализ или нет, например.

<PropertyGroup> <!-- Exclude the project from analysis --> <SonarQubeExclude Condition="$(ExcludeCommonCode)=='true'" >true</SonarQubeExclude> </PropertyGroup>

...и затем передайте аргумент /p:ExcludeCommonCode=true в MSBuild для сборок решений, для которых вы не хотите анализировать общий код.

Исключение общих проектов таким образом не просто исключает эти проекты из покрытия кода: это означает, что код вообще не будет анализироваться (без проблем и без метрик), и эти проекты MSBuild не будут отображаться в этом проекте SonarQube в все. Однако, я думаю, это то, что вам нужно, если у вас есть отдельный проект SonarQube для анализа общих проектов.

person duncanp    schedule 07.06.2018
comment
Это великолепное решение, и это именно то, что мне нужно. - person nullPainter; 08.06.2018