1. 程式人生 > >Windows下配置SonarQube Scanner檢測分析程式碼

Windows下配置SonarQube Scanner檢測分析程式碼

Windows下配置SonarQube Scanner檢測分析程式碼

SonarQube 架構

首先這裡繼續引用下SonarQube的架構圖,在上文中記錄了Windows下SonarQube服務及資料庫環境的配置,本文則在此基礎上,簡單記錄SonarQube Scanner程式碼分析工具的配置及使用,文中發現有問題或疏漏,希望可以得到您的反饋。

對於SonarQube Scanner這裡不做太多介紹了,至於為什麼使用SonarQube Scanner,看這裡

SonarQube 官方文件推薦

SonarQube官方文件 推薦使用,更多原因,自行百度了~

Maven配置SonarQube Scannar實現程式碼分析

此處通過在Maven中配置Sonar Scanner,然後使用 mvn sonar:sonar 命令完成對程式碼的分析,該方式針對Maven構建專案,Gradle構建的專案未測試,自行嘗試。

Maven環境配置

為了可以使用Maven命令執行Sonar來分析專案程式碼,首先需要將Maven的bin目錄新增到環變數內,如下:

Maven 環境變數

配置完成後,在命令列視窗使用命令 mvn -v 檢視Maven版本等資訊,驗證環境變數配置完成

Maven 命令列檢視版本


Maven增加SonarQube Scanner配置

首先在 Maven 的 conf 目錄下找到Maven的配置檔案 settings.xml

,搜尋到 <profiles> 節點,在其中新增SonarQube Scanner的配置,如下圖:

<profiles>
    
     <!-- 複製以下內容 -->
   
    <profile>
        <id>sonar</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties
>
<!-- 配置 Sonar服務地址,此處為本地服務 --> <sonar.host.url> http://127.0.0.1:9000/ </sonar.host.url> </properties> </profile> <!-- 複製以上內容 --> </profiles>

注意: 若在Maven的 conf 目錄下未找到 settings.xml 配置檔案,則可以在Maven倉庫預設目錄 C:\Users\[你登陸賬號的使用者名稱]\.m2 下查詢。


Maven專案目錄執行命令分析

進入想要檢測分析的Maven專案目錄,在專案根目錄開啟命令列,輸入命令 mvn sonar:sonar

Maven Sonar程式碼掃描檢測

首次進行程式碼檢測掃描時,會下載SonarQube Scanner相關jar包,類似下圖:

enter description here

掃描完成後,會看到 BUILD SUCCESS 的提示,到此程式碼的檢測掃描完成。

Maven Sonar掃描檢測完成


IDEA內通過Maven執行SonarQube Scanner分析

下面介紹,在上步操作完成的基礎上,怎麼在IDEA開發工具內使用使用SonarQube Scanner進行程式碼檢測分析。

首先IDEA開啟需要檢測分析的Maven專案,在 Run/Debug Configurations 中,新增一個Maven的執行配置,具體配置如下:

IDEA 開啟執行配置

IDEA 新增Maven配置

IDEA Maven配置


配置完成後,選擇此執行方式,點選執行,控制檯可以看到類似上步中命令列視窗的輸出內容,等待出現 BUILD SUCCES 的提示字樣後,表示程式碼的檢測分析完成,此時可以在SonarQube服務內檢視分析結果。此處僅測試IDEA環境,Eclipse等其他IDE開發工具自行測試。


SonarQube Scanner配置

前面說了Maven使用SonarQube Scanner完成對Maven程式碼的檢測分析,下面記錄直接下載的SonarQube Scanner配置及使用。

SonarQube Scanner下載

可以在此處下載支援各種環境的SonarQube Scanner,根據自己需要進行選擇即可。在SonarQube官網下載對應系統版本的SonarQube Scanner cli,該版本支援命令列模式。

SonarQube Scanner CLI 下載

下載完成後,任意目錄下解壓,目錄結構大致如下,目錄作用類似SonarQube

SonarQube Scanner CLI 目錄結構


SonarQube Scanner配置

  • 配置環境變數(為了可以全域性使用SonarQube Scanner)

    SonarQube Scanner 環境變數配置

  • 驗證環境變數是否配置成功

    SonarQube Scanner 環境變數配置驗證

  • 新增檢測掃描的專案
    開啟SonarQube Scanner的配置檔案(..\sonar-scanner-3.2.0.1227-windows\conf\sonar-scanner.properties ) ,配置如下

  #----- Default SonarQube server
  sonar.host.url=http://localhost:9000
  
  #----- Default source code encoding
  sonar.sourceEncoding=UTF-8
  
  # 配置專案的Key(每個專案唯一的專案鍵,使用Maven時設定為 <groupId>:<artifactId>)
  sonar.projectKey=com.codersoft:cms
  
  # 配置分析的專案在SonarQube服務介面顯示的名稱
  sonar.projectName=cms
  # 配置分析的專案的版本(使用Maven時取<version>的值)
  sonar.projectVersion=1.0
  
  # 配置要分析的專案根目錄
  sonar.projectBaseDir=D:/work/workspace/gitee/cms/rbac/cms
  # 配置包含原始檔的目錄(未設定,則從預設的Maven原始碼位置檢索)
  sonar.sources=.
  	

新增完成後,命令列視窗,執行命令 sonar-scanner -Dsonar.java.binaries=. (SonarQube的sonar-java-plugin外掛版本大於4.12後,不能直接使用 sonar-scanner 命令,需要提供對應原始碼的位元組碼,詳情看文末異常問題記錄)

更多SonarQube Scanner內容見SonarQube官網文件, 更多SonarQube配置的分析引數見此處


IDEA配置SonarLint外掛

IDEA支援不少用於程式碼質量檢測的外掛,如阿里巴巴的程式碼規範外掛、FindBugs等,此處可以嘗試使用SonarLint外掛。

SonarLint外掛安裝

在IDEA中開啟設定介面( File -> Settings ) , 選擇 Plugins 進入IDEA的外掛市場搜尋 SonarLint 進行安裝

enter description here

等待下載安裝完成後,重啟的IDEA中即可完成安裝。

安裝完成重啟IDEA後,會出現如下提示,此時需要對SonarLint外掛進行配置

IDEA SonarLint未配置提醒

安裝提示,點選 SonarLint project configuration 進行SonarLint 專案的配置

IDEA SonarLint關閉遠端服務

或在設定中進行配置

IDEA SonarLint關閉遠端服務繫結

此處關閉遠端SonarQube Server的繫結,即使用本地SentLint外掛預設的程式碼檢測規則。這樣就可以在本地環境下使用預設規則進行程式碼檢測分析,可以點選選單項 Analyze ,找到 Aanlyze all files with SonarLint 的子選單項

IDEA 程式碼分析選單項

嘗試點選此項,來檢測分析當前專案的所有檔案

IDEA SonarLint檢測分析確認

IDEA SonarLint程式碼分析檢測

單個檔案的檢測,可以在想檢測檔案右鍵選擇 SonarLint 進行檢測,具體操作此處不贅述。


SonarLint外掛配置

SonarQube可以針對專案進行檢測規則等設定,要讓IDEA中SonarLint外掛同步使用SonarQube服務中更新的規則,則需要如下配置

  • 配置SonarQube Server

    IDEA SonarLint配置服務

    支援兩種登陸驗證方式,此處使用本地SonarQube服務,則使用賬號密碼登陸(遠端專案,可以使用Token驗證)

    IDEA SonarLint配置服務

    IDEA SonarLint配置服務

  • 繫結配置SonarQube服務內的專案,用於同步檢測規則

    IDEA SonarLint繫結遠端專案
    注意:SonarQube沒有服務時,此處無法配置,可以通過SonarQube Scanner或Maven來進行專案程式碼的檢測分析,實現專案的新增。
    配置完成後,回到服務配置介面,點選更新規則,即可獲取SonarQube服務上針對該專案配置的檢測規則。

最後,SonarQube的Token,可以在使用者設定裡進行增刪

SonarQube Token生成


SonarQube服務內檢視分析結果

完成程式碼的分析檢測後,可以在瀏覽器訪問SonarQube服務地址,此處為本地搭建服務,則訪問地址 http:\\localhost:9000

SonarQube 分析結果

可以在Sonar服務管理頁面內看到新掃描的Maven專案的分析報告,此時根據需要檢視對應內容,不再贅述。


SonarQube Scanner異常問題記錄

SonarQube Scanner執行 sonar-scanner 命令時,出現錯誤時,可以通過執行 sonar-scanner -X 來輸出詳細錯誤日誌,方便問題的排查。

異常 AnalysisException: Please provide compiled classes of your project with sonar.java.binaries property

該問題原因見官方文件

SonarQube Java外掛和位元組碼

大體意思,自SonarJava 4.12後,不使用Maven或Gradle構建工具來分析程式碼時,必須手動提供與原始碼對應的位元組碼,否則就會分析失敗,並出現該異常提示。

可以嘗試通過以下方式處理:

  • 執行命令修改為 sonar-scanner -Dsonar.java.binaries=.

  • 或在配置檔案內新增下列配置(追加內容在上文基礎上進行)

    # sonar.sources=.
    # 此處配置該專案的子專案的原始碼檔案目錄
    sonar.sources=./cms-common/src,./cms-dao/src,./cms-service/src,./cms-tester/src,./cms-web/src
    
    # SonarJava 4.12 以後,不使用Maven等構建工具分析程式碼,則必須手動提供對應原始碼的位元組碼
    # 此處配置該專案的子專案的class位元組碼檔案目錄
    sonar.java.binaries=./cms-common/target/classes,./cms-dao/target/classes,./cms-service/target/classes,./cms-tester/target/test-classes,./cms-web/target/classes
    
    
  • 下載SonarJava 4.12之前版本的外掛,替換現有版本,外掛原始碼下載地址外掛jar包下載地址

    SonarJava各版本下載

    下載完成後,替換 ..\sonarqube-6.7.5\extensions\plugins\ 目錄下的 sonar-java-plugin-xxx.jar (本文SonarQube的SonarJava外掛版本為 5.7.0.15470) ,重啟SonarQube服務即可。

網上很多文章提供第三種方法解決該異常,我下載了 4.10.0.10260 版本的java外掛jar包,按照此思路替換外掛jar包後,重啟服務,如出現下圖提示情況

SonarJava jar包版本替換後出現的異常

且執行 sonar-scanner 命令出現SonarQube服務(本文已經將SonarQube服務配置為系統服務)停止的情況,在嘗試清理 c:\user\[你當前登陸計算機的使用者名稱]\.sonar 下的檔案全部刪除,然後重啟服務,依舊出現上文提示,且服務過一段時間也會停止執行。具體原因暫不明確,初步認為是外掛版本問題,不知是否還有還是其他問題,未做更多版本測試,本文暫不推薦第三種方法處理,如遇到此情況,且知道解決方案的希望告知,謝謝。