Я получаю предупреждение 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 в работе Jenkins в многомодульном Java-проекте. Плагин Git 1.2 установлен.

Запуск git blame вручную в оболочке bash для любого из проблемных файлов дает ожидаемый результат.

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

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

35
Amedee Van Gasse 25 Май 2016 в 11:58

2 ответа

Лучший ответ

Причиной была ошибка JGit. JGit не поддерживает .gitattributes. У меня был ident в моем { {X2}}. Обычная консоль 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
13
Community 23 Май 2017 в 12:25

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

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

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

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

5
John Meyer 19 Окт 2017 в 15:42