SonarQube代碼檢查工具-2021-01-10

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ù)

SonarQube-database.png

其他詳細(xì)的配置,請(qǐng)參與官網(wǎng)的配置說(shuō)明

https://docs.sonarqube.org/7.9/requirements/requirements/

首頁(yè)到最下方,可以選擇不同版本進(jìn)行下載

image-20210109222726066.png

比如,我用的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
image-20210109223541144.png

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

image-20210109223615838.png

登入系統(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)目的分析了

image-20210110113431549.png

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

image-20210110113731869.png

在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)的插件包

image-20210110114249435.png

下載好之后,將插件包復(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、漏洞

image-20210110121506217.png

執(zhí)行分析語(yǔ)句之后,會(huì)將我們執(zhí)行的項(xiàng)目中的、bug、漏洞、以及不優(yōu)雅的地方展示展示出來(lái),這里以上圖為例

點(diǎn)擊查看規(guī)則,會(huì)有一個(gè)示例

image-20210110121721537.png

大致意思就是創(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
image-20210110122202978.png

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

biaoqingbao.jpg

參考官網(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)

image-20210110123353138.png

在令牌欄輸入令牌名稱(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容