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

4
我使用 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 ?)


你有没有得到这个问题的答案?我也遇到了同样的情况。 - dukethrash
你有没有得到答案?再打个电话问问? - Ed Harrod
这是一个答案:https://stackoverflow.com/questions/62536527/sonarqube-scanner-fails-with-not-inside-a-git-worktree-error/62727475#62727475 - Puka
这个回答解决了你的问题吗?SonarQube扫描器出现“Not inside a git worktree”错误 - Puka
2个回答

0

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

sonar.projectBaseDir

例如,如果您的代码在mycodedir中,则应执行以下操作。

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

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

如果您的源代码在mycodedir/mysources中,测试在mycodedir/tests中。

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

0

我为此奋斗了整整5个小时。觉得应该分享一下对我有用的方法。

将子目录名称与存储库名称相同,并从那里运行mvn sonar命令。

SonarQube使用来自Eclipse jgit的Java库进行Git工作,这会检查sonar.projectBaseDir是否具有.git文件夹以及其他一些Git文件/文件夹等内容。

注意:当Jenkins Git SCM克隆时,它会直接将存储库内容放在工作区中,并没有创建任何目录。

设置: SonarQube 7.7 Jenkins Declarative Pipeline

示例代码:

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 '
                }


你的意思是让子目录名称与代码库名称相同吗?通常都是这样做的。但这样做对扫描器有什么好处呢?我也是按照这样的设置,但并没有生效。 - Mikhail
如果你的子目录路径为'my/subdir',仓库名为'unibeautify',例如'https://github.com/Unibeautify/unibeautify.git',那么你的路径应该为'my/unibeautify'。 - kalabase lebelo
为什么:1. 注意,当Jenkins Git SCM克隆时,它会直接将repo的内容放在工作区中,不会创建目录。2. SonarQube使用来自Eclipse jgit的Java库进行Git工作,并检查sonar.projectBaseDir是否具有.git文件夹以及其他一些Git文件/文件夹等内容。 - kalabase lebelo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接