【问题标题】:Sonarqube: Missing blame information for the following filesSonarqube:缺少以下文件的责备信息
【发布时间】:2016-09-22 18:31:27
【问题描述】:

我在 SonarQube 分析期间收到警告 Missing blame information for the following files

[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 已安装。

在 bash shell 中对任何有问题的文件手动运行 git blame 会产生预期的输出。

我发现的相关问题都是关于 SVN,我的问题是 Git。

如何获取有关 Sonarqube 的 git blame 信息?

【问题讨论】:

  • 如果我理解您的描述,您有一个使用多个 git 存储库的简单 Jenkins 项目吗?您的声纳项目是 Jenkins 拉取的所有 git 模块的总和。
  • 没有。关系 git/jenkins 是一对一的。
  • 所以你可以看看this post。我有 Jenkins 在单个 Jenkins 项目中管理多个 git 项目的问题
  • 没有。这不是问题的根本原因。所有文件都已提交,但 JGit 对 SonarQube 撒了谎。这是 JGit 中一个 5 年历史、文档完善且未解决的错误。请参阅下面的答案。

标签: java git maven jenkins sonarqube


【解决方案1】:

原因是JGit bug。 JGit 不支持.gitattributes。我的.gitattributes 中有ident。普通控制台 git 检查了源代码,在 $Id$ 宏上应用了 ident,但随后 JGit 忽略了这一点,并看到了一个未提交的差异,实际上并没有。

SonarQube mailing list 上的好心人帮助了我,并建议用standalone JGit command line distribution 调试:

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$ 宏。

这是我用来删除所有 $Id$ 宏的 (Bash) 代码:

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

【讨论】:

  • windows 机器用户怎么样,他们如何删除 $Id$ 宏?我尝试了以上几行,但它在 Git Bash 中不起作用
  • 安装适用于 Windows 的 Linux 子系统,或者现在称为 Linux-on-Windows 的任何东西,您就有了一个在 Windows 中运行的完整 Linux。但是您的问题超出了本题的范围,如果您仍然需要帮助,请提出一个新问题。
【解决方案2】:

我遇到了类似的问题:我的项目中的一个文件是在构建过程中创建的,并且没有存储在源代码管理中。就我而言,它是api.json

在 Team City 的 SonarQube 运行器构建步骤中,我将此文件添加到附加参数中的排除项中

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

错误消失了。

【讨论】:

  • 在我的项目中,我注意到Missing blame information for the following files: 有 pom.xml 列表以及从扫描中排除的每个 java 文件
  • 导致错误的原因与我的情况不同,但也许其他人对您的回答有所帮助。
  • 类似地,我的 DevOps 构建过程会自动修改现有版本文件以添加特定于该构建的信息。然后,SonarQubeAnalyze 会警告缺少责备信息,直到我按照您的建议将此文件添加到 sonar.exclusions
【解决方案3】:

Sonar 升级后,我遇到了一个构建停止工作的问题。

对我来说问题是 Jenkins 作业被配置为在从 git 提取时执行浅克隆。这没有提取足够的历史记录,因此 Sonar 5.6.6 无法进行分析,因为责备信息未包含在浅拷贝中。我在运行 Sonar 时使用了 -X 选项来查看它阻塞的实际提交号。

我是我的情况,我只是取消了浅拷贝复选框和 BAM,它再次工作(虽然更慢)!

【讨论】:

  • 您的回答与我提出的问题无关,但它仍然有用,因为它抑制了我从 SonarQube 收到的另一条警告消息。
  • 如果它导致相同的警告,它是如何无关的?
  • 我在 Jenkins 中也遇到过同样的问题,而浅克隆也是我之前的警告。所以对我来说,这是一个真正的答案,在 Jenkins 的上下文中
  • 它是无关的,因为它与前面提到的JGit中的ident错误无关。
  • 不同的原因可能导致相似的结果。你知道,就像条条大路通罗马。
【解决方案4】:

这个案例还有另一个解决方案可以解决我的问题。 如果您在公司或公司位置,则必须登录到工件存储库才能启动 docker 示例

$ docker login artifactory.companyname.corp

之后,docker 会询问您的公司用户名和密码 问题解决了

【讨论】:

  • 似乎与所描述的问题无关。请添加更多信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-10
  • 2010-10-11
  • 1970-01-01
  • 2021-12-20
相关资源
最近更新 更多