克隆到子目录时的 SonarQube Jenkins/git 集成

Posted

技术标签:

【中文标题】克隆到子目录时的 SonarQube Jenkins/git 集成【英文标题】:SonarQube Jenkins/git integration when cloning to a subdirectory 【发布时间】:2018-08-21 18:36:01 【问题描述】:

我有 Jenkins 的 git 插件将我的存储库克隆到 WORKSPACE 的子目录。因此,我设置了

sonar.sources=my/subdir

但是,上述设置似乎并未通知 SCM 检测;和设置

sonar.scm.provider=git

…产量:

ERROR: Not inside a Git work tree: /path/to/my/workspace

如何通知 SonarQube 的 git 插件我的源位置? (为什么使用sonar.sources 不够聪明?)

【问题讨论】:

你有没有得到这个答案?我正在经历同样的事情。 另一个电话,看看你是否得到了答案? 这是一个答案:***.com/questions/62536527/… 这能回答你的问题吗? SonarQube Scanner fails with “Not inside a git worktree” error 【参考方案1】:

为此苦苦挣扎了整整 5 个小时。我应该分享对我有用的东西。

使子目录名称与 repo 名称相同并从那里运行 mvn sonar 命令

SonarQube 使用来自 Eclipse jgit 的 java 库进行 git 工作,它会检查 sonar.projectBaseDir 是否有 .git 文件夹和其他一些 git 文件/文件夹。

注意,当 jenkins Git SCM 克隆时,它会将 repo 的内容直接放在工作区上,不会创建目录

设置: SonarQube 7.7 Jenkins 声明式管道

示例代码:

checkout([$class: 'GitSCM', branches: [[name: branchName]], 
                doGenerateSubmoduleConfigurations: false, extensions: [ [$class: 'RelativeTargetDirectory', relativeTargetDir: "$env.artifactId"]], 
                submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'credts', url:  'http://server.com/'+"$env.artifactId"+'.git']]])


                    withSonarQubeEnv('Sonar Dev') 
                    sh 'cd ' + "$env.artifactId" + ' && mvn  -U clean package sonar:sonar '
                

【讨论】:

"使子目录名称与 repo 名称相同" - 你是什么意思?通常情况就是这样。它将如何帮助扫描仪?我有同样的设置,但它不适合我。 如果你的子目录路径是 'my/subdir' 并且 repo 名称是 'unibeautify' 就像在 'github.com/Unibeautify/unibeautify.git' 那么你的路径应该是 'my/unibeautify' 为什么:1. 注意当 jenkins Git SCM 克隆时,它会将 repo 的内容直接放在工作区中,没有创建目录 2. SonarQube 使用 Eclipse jgit 中的 java 库来进行 git 工作,这检查 sonar.projectBaseDir 是否有 .git 文件夹和其他一些 git 文件/文件夹。【参考方案2】:

如果您的代码位于子目录中,则必须设置以下属性

sonar.projectBaseDir

例如,如果您的代码在 mycodedir 中,那么您会这样做

-D"sonar.projectBaseDir=$WORKSPACE/mycodedir"

当您这样做时,您可以将源和测试参数更改为上述目录的引用,例如

如果您在 mycodedir/mysources 中有源代码,并且在 mycodedir/tests 中有测试

sonar.sources=./mysources
sonar.tests=./tests

【讨论】:

以上是关于克隆到子目录时的 SonarQube Jenkins/git 集成的主要内容,如果未能解决你的问题,请参考以下文章

Golang 单元测试矩阵在 SonarQube 仪表板上不可见

启动 SonarQube 7.1 Web 服务器时的问题

在 linux 机器中设置时的 Sonarqube-4.0 问题 (linux-x86-32)

Sonarqube gitlab 报告发布者未完成

通过 HTTPS 或 SSH 克隆时的带宽差异

Jenkin-Jenkins忘记密码