sonarqube基礎:掃描規則:3: 指定Quality Profile進行程式碼掃描
這篇文章以前面建立的Spring boot2的web應用為例,使用自定義的Quality Profile來進行質量的檢查。
事前準備
關於spring boot+maven+jacoco+sonarqube+junit等相關基礎,請參看 spring快速入門系列中的整理,此處不再贅述。
- spring快速入門: https://blog.csdn.net/column/details/13907.html
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,雖然這裡只能裁剪,但是也已經能夠滿足不少實際的需求了。