git Sonarqube:缺少以下文件的责任信息

0pizxfdo  于 2022-11-20  发布在  Git
关注(0)|答案(5)|浏览(222)

我在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责备信息?

wgx48brx

wgx48brx1#

原因是一个JGit bug。JGit不支持.gitattributes。我的.gitattributes中有ident。普通控制台git checkout 了源代码,在$Id$宏上应用了ident,但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$宏。
这是我用来删除所有$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
zlhcx6iw

zlhcx6iw2#

我遇到了这个问题与建设停止工作后,声纳升级。
我的问题是Jenkins作业被配置为在从git拉取时进行Shallow Clone。这没有拉取足够的历史记录,所以Sonar 5.6.6无法进行分析,因为在shallow副本中没有包含责备信息。我在运行Sonar时使用了 -X 选项来查看它阻塞的实际提交次数。

我是我的情况下,我只是取消选中了浅层复制复选框和砰,它再次工作(虽然更慢)!x1c 0d1x

f2uvfpb9

f2uvfpb93#

我也遇到过类似的问题:我的项目中的一个文件是在生成过程中创建的,并且没有存储在源代码管理中。在我的例子中,它是api.json
在Team City的SonarQube runner构建步骤中,我将此文件添加到了附加参数中的排除项中

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

错误消失了。

xzv2uavs

xzv2uavs4#

对于来自Google的用户:当SonarLint插件连接到Sonar服务器时,也可能在IntelliJ中看到Missing blame information for the following files
如果在运行mvn sonar:sonar时有未跟踪的文件或未提交的更改,则这些文件将被列为丢失的责任信息。
现在,我的项目在SonarQube Web界面中显示了一个失败的质量门,但下次在CI管道中运行分析时,该问题应该会消失。

30byixjq

30byixjq5#

对于这个案例还有另一个解决方案解决了我的问题。

$ docker login artifactory.companyname.corp

之后,Docker将询问您的企业用户和密码,问题就解决了

相关问题