У меня есть проект C#, который использует StyleCop.Analyzers (на основе Roslyn). Когда мы составляем этот проект с использованием MSBuild 14, мы видим следующее предупреждение поднятого StyleCop.Analyzers:SonarQube перезаписывает набор правил и анализаторы
warning SA1005: Single line comment must begin with a space.
До сих пор, так хорошо. Это то, чего мы ожидаем.
Затем мы создали простой скрипт, который делает эту компиляцию в SonarQube MSBuild пуска/остановки:
cd MyProjectRoot
"D:\MSBuild.SonarQube.Runner-2.0\MSBuild.SonarQube.Runner.exe" begin /k:test /n:test /v:1.0.0 /d:sonar.host.url=https://mysonar.com/ /d:sonar.login=abc
"C:\Program Files (x86)\MSBuild\14.0\bin\msbuild.exe" /p:Configuration=Debug /t:Rebuild
"D:\MSBuild.SonarQube.Runner-2.0\MSBuild.SonarQube.Runner.exe" end
Когда мы запустим это, у нас есть что-то странное: мы не видим предыдущее предупреждение SA1005.
Глядя на выходе MsBuild мы видим, что, когда MSBuild является не называется в SonarQube старт/стоп, мы имеем следующее:
C:\Program Files (x86)\MSBuild\14.0\bin\csc.exe ... /analyzer:..\packages\StyleCop.Analyzers.1.0.0\analyzers\dotnet\cs\Newtonsoft.Json.dll /analyzer:..\packages\StyleCop.Analyzers.1.0.0\analyzers\dotnet\cs\StyleCop.Analyzers.CodeFixes.dll /analyzer:..\packages\StyleCop.Analyzers.1.0.0\analyzers\dotnet\cs\StyleCop.Analyzers.dll
Но когда StyleCop используется в SonarQube старт/стоп , у нас есть:
C:\Program Files (x86)\MSBuild\14.0\bin\csc.exe ... /analyzer:C:\Users\myuser\AppData\Local\Temp\1\.sonarqube\.static\csharp_1.11.0\SonarAnalyzer.zip\SonarAnalyzer.CSharp.dll /analyzer:C:\Users\myuser\AppData\Local\Temp\1\.sonarqube\.static\csharp_1.11.0\SonarAnalyzer.zip\SonarAnalyzer.dll
Так как вы можете видеть, мы не используем те же анализаторы! На самом деле, я не использую мои настроенные анализы вообще. Кроме того, мы не используем один и тот же набор правил. Я не показал его на выходе MSBuild, но вы можете мне доверять;)
Так два вопроса:
- Как мы можем сохранить наши сконфигурированные анализаторы кода при компиляции с SonarQube включен?
- Как мы можем сохранить настроенный RuleSet при компиляции с включенным SonarQube?
Обратите внимание, что я использую:
- SonarQube MSBuild бегун сервер 2.0
- SonarQube 5.3
- SonarQube C# плагин 5.2
Ничего себе это сложно и сложно сохранить в синхронизации с источником управления! В нашем реальном использовании мы используем пользовательские анализаторы, которые обнаруживают нарушение правил кодирования. Затем мы используем набор правил для отключения некоторых правил для частей кода. Анализатор находится в одном из наших пакетов nuget. Мастер конфигурации просто ** не может быть сонарным. Это должен быть исходный код, так как люди будут изменять набор правил + версию анализатора по мере изменения своего кода. Поэтому рабочий процесс, который накладывает SonarQube, не работает для нас ....это должно быть наоборот: Source control является ведущим, а SonarQube - подчиненным. – mabead
После того, как вы соколировали в целевые файлы, включенные Sonar, я пришел к выводу, что компиляция с Sonar изменяет параметры msbuild (например: обработать предупреждение, поскольку ошибки установлены на «false», хотя мой проект задал значение «true»). Это очень нежелательно. Мой процесс сборки теперь не ведет себя одинаково, когда метрики quan-сонара захватываются :(Проект с использованием SonarQube должен быть скомпилирован дважды. 1) Скомпилируйте его, как правило, для создания артефакта сборки (например: msi). 2) Восстановите его с включенным SonarQube. Это гарантирует, что все параметры компиляции, установленные вашими разработчиками, не будут изменены SonarQube. – mabead
Мы не используем сонар так же, как вы. У нас есть ночная сборка, которая просто запускает сборку сонара и не создает никаких артефактов. У нас есть дополнительные сборки, которые генерируют артефакты и т. Д. (В основном сонар сам по себе) –