场景:存储库中有3个分支:
'主' - > '刺'被推向生产的分支
' devBranch A' - 开发分支 - 假设单个开发人员
' devBranch B' - 与上述相同的开发分支。
我们在Jenkins CI / CD管道中使用SonarQube(6.x)进行静态代码分析,这是在BitBucket中创建拉取请求而开始的。我们使用Git Jenkins插件。现在,在创建拉取请求时,Git会从BitBucket进行结账:
android:nestedScrollingEnabled="true"
我正在尝试确保仅来自特定分支中特定拉取请求的代码 - 而不是所有与模式匹配的分支中的所有提交" origin / feature / *&# 34;由SonarQube进行分析 - 尝试确保我们永远不会在与我们的Git Jenkins插件匹配的所有分支中每次提交'分支说明符'
那么我该怎么做:确保SonarQube只扫描特定pull请求中的代码,而不是匹配分支说明符模式的分支中的所有更改。
感谢
编辑:我很想删除这个问题,因为我不觉得我已经明确表达了这个问题我试图以一种实际上与技术相关的方式解决......当Jenkins / Git插件检出该代码时,它实际上是检查出正确的代码 - 该版本是PR发起的repo中的Head提交......所以......这样做是预期的。
以前,另一个问题是sonarqube分析源代码的正确路径:它们需要相对于Jenkins工作的工作空间......
摘要:我没有删除这个问题,而是澄清了我的不良措辞,并对可能会发现任何这种启发的人做了简短的跟进。
答案 0 :(得分:1)
我建议看看git hooks。也许你可以编写一个钩子来检查Sonar中的代码,然后再将它推送到存储库。此外,您可以在IDE中使用插件,例如 SonarLint ,可以根据Sonar中的规则在IDE中动态分析代码,但钩子将比插件更严格。
答案 1 :(得分:0)
考虑到你知道要拉哪个分支,你可以做到
$ git fetch
$ git diff <branch>...origin/<branch>.
这将只提供将被提取的提交。 记下更改列表并将其传递给sonar-scanner(或您正在使用的任何其他客户端)以仅包含所提及的文件。
这样的事情:
sonar-scanner -Dsonar.inclusions=<Comma-delimited list of files>
现在,既然你正在使用插件从git中提取,我建议在拉开始之前,执行git日志并获取旧的提交SHA,执行git pull,获取新的提交SHA。使用旧的和新的SHA,执行git diff / git日志来获取有变化的文件列表。