SonarQube + Git не могу понять :)

С добрым. Окунулись в мир НПК. Появились ламерские вопросы. Итак, проект на git, хочется добавить проверку качества кода на sonarqube. Проблема в том, что это доработка типовой конфигурации и проверять хочется только свои доработанные или внедренные объекты. Сейчас тупо с помощью powershell файлы с соответствующими метками доработок копируются с сохранением структуры каталогов в каталог проекта sonarqube, после чего запускается проверка sonar. Но при этом в проекте не указано что это проект git и возможно мы теряем что-нибудь на этом.
Любые попытки настроить sonar.scm.* приводят к неудачам. Подскажите пожалуйста есть ли возможность решить нашу задачу или мы где-то кардинально сбились с пути?

Коллеги из SB, если вы используете их плагин, предоставляют утиллиту, которая позволяет настроить сабмодули (по подсистемам), и вы можете их смотреть отдельно замечания по каждой подсистеме. Еще, в их же плагине, есть настройка отключения проверки объектов, находящихся на поддержке (я не тестировал, но говрят работает).

Если вы смотри написать скрипт, который выбирает нужные объекты, тогда воспользуйтесь секцией exclude, где перечислите имена файлов, которые анализировать не хотите (только учтите, что имена должны быть в unicode).

Что по поводу scm, запускайте анализ из склонированного репозитория и дальше усе будет само

Я не хочу анализировать весь проект. Это дольше, затратнее и большая часть кода - типовая, повлиять на которую мы не можем :slight_smile:

То есть единственный вариант - это каждый раз заново формировать файл sonar-project.properties со списком исключаемых файлов? При этом проекты git и sonar размещаются в одном каталоге, это нормально? Нет возможности разнести их?

Вы как запускаете анализ?

Например я делаю так (на ci сервере, но не важно)

  • создаю каталог
  • клонирую репозиторий
  • генерирую сонар пропертиз на основании шаблона и алгоритма исключения файлов
  • запускаю сонарсканнер в этом каталоге

Есть каталог проекта sonar, внутри папка src, перед запуском сканера она очищается, с помощью скрипта powershell туда копируется часть исходного кода из каталога проекта git после чего запускается сканер. Соответственно, в properties указано sonar.sources=src.

То есть при использовании sonar + git мне необходимо держать две копии репозитория? Рабочую и для тестов sonar?

Попробуйте мой вариант, так будет проще, как мне кажется.

Кстати, если у вас набр файлов исключения постоянен - то его можно зафиксировать в репозитории, и тогда ничего дополнительно не потребуется

Конечно нет, ведь программисты постоянно “врезаются” в новые типовые алгоритмы :slight_smile:
А как Вы генерируете список исключений? Точнее как он добавляется в файл properties, ведь это большой список.

Большой, исключаемые файла через запятую перечисляются. Опять же, можно исключать каталоги целиком, например если у вас все документы не тронуты - исключите папку с документами

Это понятно, просто я к тому, что такая конструкция в файле настроек может быть только одна и sonar съест в ней строку любой длины?

Пока с ограничением не сталкивался.

Подробнее в документации можете посмотреть https://docs.sonarqube.org/latest/project-administration/narrowing-the-focus/

Это я видел, спасибо. Я правильно понял, что у Вас список файлов и каталогов именно генерируется и помещается в файл настроек проекта sonar?

В тех проектах, где это необходимо, да.

Есть еще кейс, отключаются ишузы по пользователю, файлы же не трогаются вовсе

Понимаю, но меня смущает время проверки. В случае проверки всего функционала оно недопустимо большое плюс расход памяти бла-бла-бла.

Как сказать, долго только первый раз, протом в разы быстрее. Долго каждый раз только без использования scm

Ясно. А чем плох вариант, когда оба проекта находятся в одном каталоге? Чтобы не клонировать репозиторий?

Я не понял, что такое “два проекта” в вашем случае

Это я наверное неправильно Вас понял. У Вас тестирование выполняется на машине, свободной от репозитория и Вы вынуждены его клонировать чтобы получить исходный код.

Теперь все понятно :slight_smile: Спасибо, буду ковырять