在聯(lián)想的項目接觸了一下 sonarQube 整體來說還是有很多可圈可點之處的顶考,碰巧最近有一個相關產品的選擇試用的調研羹铅,就嘗試了一下下掉蔬。
sonarQube 自己說自己用于做 continuous code quality燎窘, 從它所生成的默認的報告來看爪喘,主要包含了如下幾個部分:
不過打開一看會發(fā)現(xiàn)其實 Bugs & Vulnerabilities
和 Code Smells
基本上就是 lint 所做的事情,比如代碼風格不符合 java 的規(guī)約呀泽示,在使用 Optional
之前判斷其是否 isPresent
呀等等缸血,不過人家本來就是做靜態(tài)檢查的也無可厚非蜜氨。
Code Smells
這個名字實在是太唬人了,在 重構 里定義設計的好壞在于有沒有代碼的壞味道捎泻,如果 sonarqube 有能力甄別所有的代碼壞味道的話飒炎,那還怕神馬低質量代碼呢。不過起碼 sonarqube 有能力甄別一部分低級的代碼壞味道笆豁,比如過長的方法參數(shù):
Constructor has 9 parameters, which is greater than 7 authorized.
再比如重復的代碼呀
1 duplicated blocks of code must be removed.
甚至是提醒我們哪個方法所在的位置不合適
Move this method into "Builder"
這么看來其功能還是可圈可點的郎汪,而且我所使用的還僅僅是最基本的配置,沒有做任何的自定義闯狱。
集成
下面我介紹一下如何把 sonarqube 和 spring boot gradle 的項目做集成的煞赢。
安裝 sonarqube
最好的安裝辦法自然是 docker
docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube
修改 gradle
按照 sonarqube 的文檔 添加插件。
plugins {
id "org.sonarqube" version "2.4"
}
然后 ./gradlew clean test sonar
執(zhí)行命令哄孤。之后就可以在 http://localhost:9000 看到結果了照筑。
不過這個時候你會發(fā)現(xiàn)并沒有測試覆蓋率的數(shù)據(jù)。
這是因為 sonarqube 自己不做測試覆蓋的處理瘦陈,它依賴于其他的測試覆蓋工具凝危。比如這里我們使用 jacoco。
在 build.gradle
中添加 jacoco
:
apply plugin 'jacoco'
然后 ./gradlew clean test jacoco sonar
再去 http://localhost:9000 查看就有相應的數(shù)據(jù)了晨逝。
和 ci 集成
剛才我們只是將我們的項目和一個本地的 sonarqube server 集成了蛾默,但是在實際項目中我們通常都是在 ci 中執(zhí)行 sonar 命令并有一個共有的 sonar server 展現(xiàn)目前主分支代碼的質量。那么捉貌,我們就需要在 ci 中指定外部的 sonar server 地址以及一些其他自定義的內容支鸡。
由于 sonarqube 支持以命令行的方式傳入?yún)?shù),這樣的工作非常的簡單:
./gradlew sonar -Dsonar.host.url=http://sonar.mycompany.com -Dsonar.verbose=true
最后附上測試項目地址昏翰。