1. 程式人生 > >sonarqube基礎:掃描規則:3: 指定Quality Profile進行程式碼掃描

sonarqube基礎:掃描規則:3: 指定Quality Profile進行程式碼掃描

這篇文章以前面建立的Spring boot2的web應用為例,使用自定義的Quality Profile來進行質量的檢查。

事前準備

關於spring boot+maven+jacoco+sonarqube+junit等相關基礎,請參看 spring快速入門系列中的整理,此處不再贅述。

Quality Profile準備

根據前一篇文章的整理,請自行準備自己的Quality Profile,比如這裡根據sonarqube的三種分類方式整理如下三種Quality Profile:

Quality Profile 說明
java-sonarway-bug.xml 缺陷相關的規則
java-sonarway-vulnerability.xml 脆弱性相關的規則
java-sonarway-codesmell.xml 程式碼改善相關的規則

命令執行

執行如下命令,生成響應的Quality Profile,當然使用UI進行直接操作也沒有問題。

curl -X POST -uadmin:admin

http://localhost:32003/api/qualityprofiles/restore --form [email protected]
curl -X POST -uadmin:admin http://localhost:32003/api/qualityprofiles/restore --form [email protected]
curl -X POST -uadmin:admin http://localhost:32003/api/qualityprofiles/restore --form [email protected]

結果確認

執行中需確認規則是否都成功匯入,ruleFailures的個數應該為0

liumiaocn:java liumiao$ curl -X POST -uadmin:admin http://localhost:32003/api/qualityprofiles/restore --form [email protected]
{"profile":{"key":"java-java-sonarway-bug-65847","name":"java-sonarway-bug","language":"java","isDefault":false,"isInherited":false,"languageName":"Java"},"ruleSuccesses":75,"ruleFailures":0}liumiaocn:java liumiao$ 
liumiaocn:java liumiao$ curl -X POST -uadmin:admin http://localhost:32003/api/qualityprofiles/restore --form [email protected]
{"profile":{"key":"java-java-sonarway-codesmell-25578","name":"java-sonarway-codesmell","language":"java","isDefault":false,"isInherited":false,"languageName":"Java"},"ruleSuccesses":159,"ruleFailures":0}liumiaocn:java liumiao$ 
liumiaocn:java liumiao$ curl -X POST -uadmin:admin http://localhost:32003/api/qualityprofiles/restore --form [email protected]
{"profile":{"key":"java-java-sonarway-vulnerability-91184","name":"java-sonarway-vulnerability","language":"java","isDefault":false,"isInherited":false,"languageName":"Java"},"ruleSuccesses":20,"ruleFailures":0}liumiaocn:java liumiao$ 
liumiaocn:java liumiao$ 

執行後從Sonarqube的管理頁面也能看到成功匯入的狀況
在這裡插入圖片描述

指定Quality Profile

指定方式

預設方式下,使用的是Sonar way進行掃描,如果指定-Dsonar.profile則可指定相應的Quality Profile進行掃描。

死而不僵的sonar.profile
需要說明的是,此項功能在4.2之後已經是一個deprecated的狀態了,直到目前的版本7仍然是此種狀態。官方給出的解釋是:通過Web介面你可以很容易的進行定製你自己需要的Profile,而且認為這種事情應該在server端做。
由於此項功能尚在被廣泛使用,並且目前也沒提供除了手動操作之外的其他解決方案,相當於直接廢棄一項功能,大概是這個原因雖然從4開始deprecated了,但是一直到版本7都是可以使用的。這裡使用LTS版本5.6.5進行驗證。
我個人的結論是:直接無視,先繼續使用,因為基本也不影響使用,後面說不定就自己想通了,到時可能會有對應的替代方案出來也說不定。

執行profile

使用缺陷和脆弱性Profile

因為此處使用的例子中只有2個Code Smell,所以使用這裡只檢查缺陷和脆弱性的Profile是無法檢出任何問題的。

使用缺陷Profile檢查:mvn sonar:sonar -Dsonar.host.url=http://localhost:32003 -Dsonar.profile=java-sonarway-bug

使用安全Profile檢查:mvn sonar:sonar -Dsonar.host.url=http://localhost:32003 -Dsonar.profile=java-sonarway-vulnerability

使用這兩個profile,都是0檢出
在這裡插入圖片描述

使用Code Smell的Profile

使用Code Smell的Profile檢查:mvn sonar:sonar -Dsonar.host.url=http://localhost:32003 -Dsonar.profile=java-sonarway-codesmell

結果確認如下,可以看到檢出兩個Code Smell的問題。
在這裡插入圖片描述

總結

使用sonar.profile則可使用maven方式或者sonar-scanner方式使用企業自行裁剪的Quality Profile,雖然這裡只能裁剪,但是也已經能夠滿足不少實際的需求了。