一、sonarqube 的安裝與啓用

1. sonarqube 獲取

注意,我這邊為了能夠使用pdf插件(下載地址),選擇的sonarqube版本為9.9.9LTA版本,親測如果用目前官網最新25+版本,這個生產pdf的插件不支持,會各種錯誤。
與此對應,後續的SonarScanner也是下載的4.8.x版本。
本機環境是windows11

SonarQube 本地搭建及使用小結_配置文件


下載後解壓即可(目錄別帶中文及空格等特殊符號,防止有問題)

SonarQube 本地搭建及使用小結_#SonarQube_02

2.SonarQube配置

SonarQube支持多種數據庫,如Oracle、postgresql、sqlserver等等,按需選擇,我這裏用的本地的pgsql。

SonarQube 本地搭建及使用小結_配置文件_03


如上圖,修改sonar.properties配置文件,添加如下配置:

(不同數據庫的sonar.jdbc.url配置不一樣,配置文件中有,直接搜一下就行,配置文件中也可以看到支持哪些數據庫)

# 指定pg數據庫
sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube_old?currentSchema=public
# 指定數據庫用户名
sonar.jdbc.username=postgres 
# 指定數據庫密碼
sonar.jdbc.password=postgres
# 指定端口
sonar.web.port=9000

SonarQube 本地搭建及使用小結_#SonarScanner_04

3.啓動SonarQube

前提:本機安裝好jdk17並配置好環境變量(親測,用jdk17可用)

SonarQube 本地搭建及使用小結_#SonarQube_05

如圖,cmd中直接運行StartSonar.bat命令(或直接雙擊,我是直接cmd中命令啓動的,一開始安裝25+版本的時候,直接雙擊,報錯後直接終端窗口閃退)

啓動後如下圖,見到圈出來的,即為啓動成功(如果啓動失敗可以看/logs文件夾下的日誌,再進行對應處理)

SonarQube 本地搭建及使用小結_#SonarQube_06


SonarQube 本地搭建及使用小結_配置文件_07

4.訪問

瀏覽器訪問localhost:9000,跳轉到如圖登錄界面,首次登錄需要修改密碼。

初始賬號密碼:admin/admin

SonarQube 本地搭建及使用小結_#java_08

二、SonarScanner 插件的安裝與配置

1.下載SonarScanner

前面提過,為了使用後面的pdf生成插件,使用了SonarQube9.x版本,這裏為了和SonarQube9.x適配,SonarScanner這裏版本選擇4.8.x

下載地址

SonarQube 本地搭建及使用小結_#SonarQube_09


下載解壓後即可使用。

2.配置SonarScanner環境變量

編輯系統環境變量path,填寫SonarScanner安裝目錄

SonarQube 本地搭建及使用小結_#SonarScanner_10


SonarQube 本地搭建及使用小結_#SonarScanner_11


驗證sonar scanner環境變量是否成功:

任意位置,cmd,輸入命令 sonar-scanner -v,能夠如圖顯示出版本信息即可(不要被輸出的java 11.xxx誤解!!不要被誤解需要jdk11,jdk就用之前説的17就行!!!)

SonarQube 本地搭建及使用小結_#pdf_12

3.SonarScanner配置

SonarQube 本地搭建及使用小結_#SonarQube_13


如圖,配置SonarQube的本機地址以及編碼,和前面SonarQube配置文件一樣配置數據庫信息(這裏有些文章寫的要配,有的不用,我也不清楚,沒細研究,我這裏是配了,沒有嘗試不配置的話會不會有問題)

到此,前置準備已做好,下面開始做代碼檢測

説明:SonarQube是支持很多種檢測代碼的方式的(即create project的方式,如下圖:)

SonarQube 本地搭建及使用小結_#SonarScanner_14


SonarQube 本地搭建及使用小結_配置文件_15


因為我這裏是為了應付項目驗收,沒有嘗試去用gitlab github gitee等代碼倉庫去進行代碼檢測,也沒有結合jenkins去做cicd時觸發代碼檢測(有興趣的話可以研究一下,理想方案是,gitlab+jenkins,以及部署一台sonarqube服務器,把代碼檢測嵌入到cicd流程中去)

三、安裝pdf插件

1.下載

下載地址,直接下載jar包

2.存放

放到SonarQube安裝位置如圖

SonarQube 本地搭建及使用小結_配置文件_16


然後重啓SonarQube

3.SonarQube中PDF配置

重啓後,SonarQube中,如圖會出現個PDF Report菜單,在這其中配置密碼和用户名,直接用登錄的用户名密碼就行。

然後進行後面的代碼檢測。(如果説還沒安裝這個PDF插件前,就進行了代碼檢測,那麼需要在SonarQube中刪除後,重新進行代碼檢測)

SonarQube 本地搭建及使用小結_#pdf_17

三、本地代碼檢測

1.拉取代碼到本地

按需擇選分支,然後一定要maven package打包(我這裏是java項目,sonar必須要檢測.class文件,所以要先package)

2.配置文件

參照官網地址,在項目根目錄創建sonar-project.properties配置文件

# must be unique in a given SonarQube Server instance
sonar.projectKey=test

# --- optional properties ---

# defaults to project key
#sonar.projectName=My project
# defaults to 'not provided'
#sonar.projectVersion=1.0
 
# Path is relative to the sonar-project.properties file. Defaults to .
#sonar.sources=.
 
# Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8


sonar.login=squ_2d90616f765696baabccf63f70182f8998e9abc9

sonar.java.binaries=/target/classes,/target/classes,/target/classes,xxx/target/classes

SonarQube 本地搭建及使用小結_#SonarQube_18


SonarQube 本地搭建及使用小結_#pdf_19


其中有三個配置比較重要:

  • sonar.projectKey
    自定義的項目名稱,檢測成功後,SonarQube的project中會根據這個名字進行顯示,生成出的pdf也是基於這個名字。
  • sonar.login
    這裏要從sonarqube圖形化界面中,去生成token(9.X版本配置名為sonar.login,如果是高版本,應該是sonar.token)
    獲取位置:菜單Administration->Security->用户後面的Tokens
  • SonarQube 本地搭建及使用小結_配置文件_20


  • SonarQube 本地搭建及使用小結_#java_21

  • sonar.java.binaries
    這個配置是指定需要檢測的代碼的位置,如果多個的話,可以逗號分隔

3.代碼檢測

  • sonar-scanner開始掃描檢測

sonar-project.properties配置文件同級下,cmd終端,輸入命令 sonar-scanner 開始進行代碼檢測,如下圖,最終顯示EXECUTION SUCCESS即為成功。

SonarQube 本地搭建及使用小結_#SonarScanner_22

  • 返回SonarQube
    即可看到projects下,出現了對應的項目

    可以點進去查看項目檢測的詳情,以及如圖,可以下載pdf