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, он работал снова (хотя и медленнее)!
![введите описание изображения здесь]()