SonarQube 代碼質(zhì)量檢查工具
官網(wǎng)對(duì)于SonarQube的描述
-
15種語(yǔ)言的靜態(tài)代碼分析
Java、JavaScript、C#、TypeScript、Kotlin、Ruby、Go、Scala、Flex、Python、PHP、HTML、CSS、XML和VB.NET
檢測(cè)缺陷和漏洞
查看安全熱點(diǎn)
跟蹤代碼氣味和修復(fù)你的技術(shù)債務(wù)
代碼質(zhì)量度量和歷史記錄
CI/CD集成
可擴(kuò)展,有50個(gè)社區(qū)插件
官方網(wǎng)站
https://docs.sonarqube.org/latest/
由于 7.8以后的版本需要JDK11的支持,如果用的是JDK8請(qǐng)選擇 6.x~7.8.x中間的版本
內(nèi)存要求,至少2G
支持的數(shù)據(jù)庫(kù)

其他詳細(xì)的配置,請(qǐng)參與官網(wǎng)的配置說(shuō)明
https://docs.sonarqube.org/7.9/requirements/requirements/
首頁(yè)到最下方,可以選擇不同版本進(jìn)行下載

比如,我用的JDK8,這里選擇7.8版本的 Community 版本,其他版本是收費(fèi)的,下載好之后,解壓縮并進(jìn)入到對(duì)應(yīng)的操作系統(tǒng)目錄下,例如我這里用的是ubuntu,因此,切換到Linux目錄下
/sonarqube-7.8/bin/linux-x86-64
## 啟動(dòng)
sh sonar.sh start
## 查看啟動(dòng)日志
tail -200f ../../logs/sonar.log
## 看到以下日志時(shí),表示啟動(dòng)成功
2021.01.09 22:33:03 INFO app[][o.s.a.SchedulerImpl] Process[ce] is up
2021.01.09 22:33:03 INFO app[][o.s.a.SchedulerImpl] SonarQube is up
訪問(wèn)SonarQube
SonarQube默認(rèn)的端口號(hào)是9000:
http://localhost:9000

默認(rèn)賬號(hào)密碼都是admin

登入系統(tǒng)之后的界面,這里需要注意的是,默認(rèn)SonarQube用的是內(nèi)嵌數(shù)據(jù)庫(kù),這種數(shù)據(jù)庫(kù)是不用用于生產(chǎn)的,因此,下方會(huì)有一段黃色的提示信息。
應(yīng)用到項(xiàng)目(整合到MAVEN)
方法一: 全局配置
在maven的setting.xml配置文件中添加 .例子
<settings>
<pluginGroups>
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- Optional URL to server. Default value is http://localhost:9000 -->
<sonar.host.url>
http://myserver:9000
</sonar.host.url>
</properties>
</profile>
</profiles>
</settings>
這里使用的是沒(méi)有配置數(shù)據(jù)庫(kù)的例子,如果需要添加數(shù)據(jù)庫(kù),則需要在<properties></properties>下添加關(guān)于數(shù)據(jù)庫(kù)的配置,例子:
<properties>
<sonar.jdbc.url>jdbc:postgresql://localhost/sonar?currentSchema=public</sonar.jdbc.url>
<sonar.jdbc.driver>org.postgresql.Driver</sonar.jdbc.driver>
<sonar.jdbc.username>itmuch</sonar.jdbc.username>
<sonar.jdbc.password>itmuch</sonar.jdbc.password>
<sonar.host.url>http://127.0.0.1:9000</sonar.host.url>
</properties>
接著,在需要分析的項(xiàng)目中執(zhí)行
clean verify sonar:sonar -Dmaven.test.skip=true
接著點(diǎn)擊All就可以看到對(duì)剛才項(xiàng)目的分析了

SonarQube還提供了強(qiáng)大的插件庫(kù),在解決項(xiàng)目分析出來(lái)的問(wèn)題之前,我先安裝一個(gè)中文包

在Administration下,選擇 Marketplace選項(xiàng),在Plugins一欄中輸入 chines找到中文包,點(diǎn)擊install,這個(gè)安裝會(huì)稍微慢一些,耐心等待即可。
在安裝過(guò)程中,插件商店默認(rèn)對(duì)應(yīng)的是最新的SonarQube,因此會(huì)有版本不匹配的問(wèn)題,這里我們可以去SonarQube的github找尋對(duì)應(yīng)的版本
https://github.com/xuhuisheng/sonar-l10n-zh/releases
比如我這里的SonarQube是7.8版本就使用這個(gè)版本對(duì)應(yīng)的插件包

下載好之后,將插件包復(fù)制到 SonarQube的以下 目錄
scp sonar-l10n-zh-plugin-1.28.jar frend@192.168.0.202:/home/frend/dev/tools/sonarqube-7.8/extensions/plugins
重啟SonarQube
修復(fù)bug、漏洞

執(zhí)行分析語(yǔ)句之后,會(huì)將我們執(zhí)行的項(xiàng)目中的、bug、漏洞、以及不優(yōu)雅的地方展示展示出來(lái),這里以上圖為例
點(diǎn)擊查看規(guī)則,會(huì)有一個(gè)示例

大致意思就是創(chuàng)建之后的狀態(tài)值,我們需要判斷是否創(chuàng)建成功,其中的例子也是很明顯能看出來(lái)的
這里將提示漏洞的地方,修改一下
if (!file.exists()) {
if (!file.createNewFile()) {
log.error("創(chuàng)建文件={},時(shí)不成功", file.getName());
}
}
重新執(zhí)行分析
mvn clean verify sonar:sonar -Dmaven.test.skip=true

漏洞就沒(méi)了,剩下的不優(yōu)雅的地方[異味]和安全熱點(diǎn),,兄弟們,等我慢慢修復(fù)

參考官網(wǎng)的教程
https://docs.sonarqube.org/7.8/analysis/scan/sonarscanner-for-maven/
中文插件包安裝參考教程
https://blog.csdn.net/xinluke/article/details/52174026
方法二: 使用基于Token的命令行控制
SonarQube還有一個(gè)使用命令行控制的方式,事先需要先創(chuàng)建一個(gè)用戶(hù)Token
在右上角,點(diǎn)擊用戶(hù)圖標(biāo),選擇我的賬號(hào)

在令牌欄輸入令牌名稱(chēng),點(diǎn)擊生成,此時(shí),記住這個(gè)token
使用以下命令,攜帶token,就可以進(jìn)行分析了,此時(shí),不需要maven下的setting.xml的配置了,為了驗(yàn)證,我們先將setting.xml中的步驟一配置注釋掉
mvn sonar:sonar -Dsonar.host.url=http://192.168.0.202:9000 -Dsonar.login=37ad464c14b9bebc19cc606ec6ae85e0ffb7f379 -Dmaven.test.skip=true
至此: SonarQube簡(jiǎn)單的使用就結(jié)束了,下方參考文章中有更多玩法,有興趣的朋友可以多了解了解,祝大家變得更強(qiáng)~
參考文章:
https://blog.csdn.net/wym2011aaj/article/details/98055438
https://docs.sonarqube.org/7.8/analysis/scan/sonarscanner-for-maven/
https://blog.csdn.net/xinluke/article/details/52174026
https://blog.csdn.net/weixin_40861707/article/details/82117232