https://blog.csdn.net/weixin_30800615/article/details/113318163
有了解SonaqQube的讀者可能要說了,這個方案存在問題。一般我們會在master分支或者是develop分支上計算(增量)代碼覆蓋率。當我們把待評審的MR/Push代碼的掃描結果直接推送到這些分支上的話,如果這個請求經過評審后被拒絕,那這些分支上的數據不是被污染了么?
因此,直接利用master分支是有問題的。這里,我們需要額外利用一個 SonarQube Branch的插件。具體方案是,將待評審的MR/Push的掃描結果推送到一個約定的分支上,如"mr-xxxx"上,這個分支作為一個短分支(short branch),將基于指定的長分支(long branch)進行計算,得到上圖的質量門禁計算結果。當然這里的前提是,長分支上的數據和MR/Push的目標分支是實時對應的,否則會引起計算結果的偏差。
具體來說,就是在sonar掃描時指定分支和基線分支,以maven項目為例
mvn clean test sonar:sonar -Dmaven.test.failure.ignore -Dsonar.branch.name=mr-xxx -Dsonar.branch.target=develop
也就是以develop分支為基線,來計算mr-xxx分支相對于develop的代碼增量覆蓋率,以及靜態(tài)代碼掃描結果,并計算質量門禁結果。
由于SonarQube在社區(qū)版上并不提供多分支掃描的功能,因此只有采購develop以上的版本才能具備次功能,或者是在github上使用開源社區(qū)提供的sonarqube-community-branch-plugin
總結一下
上述方案中,額外利用了
1)SonarQube Webhook
- SonarQube 分支插件 和長短分支概念
就能在一般三者集成的方案中實現增量代碼覆蓋率和質量門禁