Sonarqube: Отсутствует информация о вине для следующих файлов

Я получаю предупреждение Missing blame information for the following files во время анализа SonarQube.

[INFO] [22:19:57.714] Sensor SCM Sensor
[INFO] [22:19:57.715] SCM provider for this project is: git
[INFO] [22:19:57.715] 48 files to be analyzed
[INFO] [22:19:58.448] 0/48 files analyzed
[WARN] [22:19:58.448] Missing blame information for the following files:
(snip 48 lines)
[WARN] [22:19:58.449] This may lead to missing/broken features in SonarQube
[INFO] [22:19:58.449] Sensor SCM Sensor (done) | time=735ms

Я использую SonarQube 5.5, анализ выполняется Maven в задании Дженкинса, в многомодульном проекте Java. Git установлен плагин 1.2.

Вручную запустив git вину в оболочке bash, в любом из файлов-нарушителей, дает ожидаемый результат.

Связанные с этим вопросы были связаны с SVN, моя проблема связана с Git.

Как получить git информацию о вине на Sonarqube?

Ответ 1

Причиной явилась ошибка JGit. JGit не поддерживает .gitattributes. В .gitattributes я использовал ident. Простая консоль git проверила источник, применила макрос ident на $Id$, но затем JGit проигнорировал это и увидел разницу, которая не была зафиксирована, где на самом деле не было.

Дружелюбные люди в список рассылки SonarQube помогли мне и предложили отладить с помощью автономное распределение командной строки JGit:

chmod +x /where/is/org.eclipse.jgit.pgm-<version>-r.sh
/where/is/org.eclipse.jgit.pgm-<version>-r.sh blame -w /path/to/offending/file

Эта конкретная ошибка JGit не была решена более 5 лет, и я не надеюсь, что она будет решена в ближайшее время, поэтому я удалил макросы $Id$ из всех моих источников.

Это код (Bash), который я использовал, чтобы удалить все макросы $Id$:

find */src -name "*.java" | xargs -n 1 sed -i '/$Id.*$/d'
find */src -name "*.java" | xargs git add
git commit -m "Remove $Id$ macros"
git push

Ответ 2

У меня была аналогичная проблема: файл в моем проекте был создан во время процесса сборки и не был сохранен в исходном элементе управления. В моем случае это было api.json.

В рамках этапа сборки бегуна SonarQube в Team City я добавил этот файл к исключениям в дополнительных параметрах

-Dsonar.exclusions=**/spec/api.json

и ошибка исчезла.

Ответ 3

Я столкнулся с этой проблемой со сборкой, которая перестала работать после обновления Sonar.

Проблема для меня заключалась в том, что задание Jenkins было настроено на выполнение мелкого клонирования при выводе из git. Это не затягивает достаточно истории, поэтому Sonar 5.6.6 не смог провести анализ, потому что информация о вине не была включена в мелкую копию. Я использовал параметр -X при запуске Sonar для просмотра фактического числа фиксации, которое оно задыхалось.

В моем случае я просто снял флажок с мелкой копией и BAM, он работал снова (хотя и медленнее)! введите описание изображения здесь