克隆到子目录时的 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 仪表板上不可见