Git 声纳可以跨多个分支进行扫描

Git 声纳可以跨多个分支进行扫描,git,jenkins,sonarqube,jenkins-pipeline,Git,Jenkins,Sonarqube,Jenkins Pipeline,场景:存储库中的3个分支: “master”->“prod”分支,该分支被推到生产中 “devBranch A”-一个开发分支-假设为单个开发人员 “devBranch B”-开发分支,同上 我们在Jenkins CI/CD管道中使用SonarQube(6.x)进行静态代码分析,这是通过在BitBucket中创建pull请求启动的。我们使用Git Jenkins插件。现在,Git在创建pull请求时正在从BitBucket执行签出,如下所示: Checking out Revision cdd7

场景:存储库中的3个分支:

“master”->“prod”分支,该分支被推到生产中

“devBranch A”-一个开发分支-假设为单个开发人员

“devBranch B”-开发分支,同上

我们在Jenkins CI/CD管道中使用SonarQube(6.x)进行静态代码分析,这是通过在BitBucket中创建pull请求启动的。我们使用Git Jenkins插件。现在,Git在创建pull请求时正在从BitBucket执行签出,如下所示:

Checking out Revision cdd7cc6fa787d111bbc6afef2728fa3353aab499 (origin/feature/TestTuesday)
我试图确保只有来自该特定分支中特定pull请求的代码——并且SonarQube不会分析任何与模式“origin/feature/*”匹配的分支中的所有提交——试图确保我们永远不会在所有与Git Jenkins插件“分支说明符”匹配的分支中获得所有提交

那么我该如何做:确保SonarQube只扫描特定pull请求中的代码,而不扫描与分支说明符模式匹配的分支中的所有更改

谢谢

编辑:我很想删除这个问题,因为我觉得我并没有以一种实际上与技术相关的方式阐明我试图解决的这个问题

当Jenkins/Git插件签出该代码时,它实际上是在签出正确的代码-该版本是源于PR的repo中的头提交。。。所以这正是我们所期待的

在此之前,另一个问题是sonarqube分析的源代码的正确路径:它们需要与Jenkins作业的工作空间相关


小结:我没有删除这个问题,我只是澄清了我拙劣的措辞,并对任何可能觉得有启发性的人进行了简短的跟进

我建议您看看git挂钩。也许您可以在Sonar中将代码推送到存储库之前编写一个钩子来检查代码。此外,您可以在IDE中使用类似Sonarint的插件,它可以根据Sonar中的规则在IDE中动态分析代码,但hook与插件相比更严格

考虑到你知道该拉哪根树枝,你可以这样做

$ git fetch
$ git diff <branch>...origin/<branch>.
$git fetch
$git diff…origin/。
这将只提供将被拉入的提交。 记下更改列表,并将其传递给sonar scanner(或您正在使用的任何其他客户端),以仅包含所述文件

大概是这样的:

sonar-scanner -Dsonar.inclusions=<Comma-delimited list of files>
声纳扫描仪-Dsonar.com=

现在,由于您使用的是一个插件从git中提取,所以我建议,在提取开始之前,先做一个git日志,然后获取旧的提交SHA,再进行git提取,获取新的提交SHA。使用旧的和新的SHA,执行git diff/git日志以获取有更改的文件列表。

我们在CI/CD管道、管道外扫描等中使用Sonarint(这些用例模拟其他场景)。。。当然,IDE插件虽然有价值,但只用于一个特定的目的。至于某种预扫描挂钩。。。我认为这是可行的,但我不认为这是理想的,我希望有其他选择。我认为最好是对执行签出的git命令的配置进行优化……我觉得这并不优雅,但我还是很感激。我会继续寻找我认为更理想的解决方案。