1. 程式人生 > 實用技巧 >Jenkins SonarQube 部署

Jenkins SonarQube 部署

SonarQube 與 Jenkins 簡介

SonarQub e 是一個開源的程式碼質量分析平臺,便於管理程式碼的質量,可檢查出專案程式碼的漏洞和潛在的邏輯問題。同時,它提供了豐富的外掛,支援多種語言的檢測, 如 J ava、Python、Groovy、C、C++等幾十種程式語言的檢測。它主要的核心價值體現在如下幾個方面:

  • 檢查程式碼是否遵循程式設計標準:如命名規範,編寫的規範等。
  • 檢查設計存在的潛在缺陷:SonarQube 通過外掛 Findbugs、Checkstyle 等工具檢測程式碼存在的缺陷。
  • 檢測程式碼的重複程式碼量:SonarQube 可 以展示專案中存在大量複製貼上的程式碼。
  • 檢測程式碼中註釋的程度:原始碼註釋過多或者太少都不好,影響程式的可讀可理解性。
  • 檢測程式碼中包、類之間的關係:分析類之間的關係是否合理,複雜度情況。

SonarQube 平臺是由 4 個部分組成:

  • SonarQube Server
  • SonarQube Database
  • SonarQube Plugins
  • SonarQube Scanner

SonarQube 與 SonarQube-Scanner 的安裝與配置

SonarQube

在 SonarQube 網,我們可以下載最新的 Sonar 安裝包,本節以 Linux 系統為例,搭建 SonarQube 平臺,解壓到任意目錄,如:unzip sonarqube5.6.zip。

SonarQube 自帶了一個 H2 的資料庫,當然為了獲得更好的效能我們可以指定一個外部的資料庫,在這裡我們使用 MySQL 資料庫。 先在 Mysql 資料庫中建立一 個 Sonar 資料庫,主要用於存放分析結果的資料,如 圖 1 :

圖 1. 建立 MySQL 資料庫

進入解壓的 SonarQueb 目錄,在系統路徑裡面配好 path,配置如下:

#sonar profile
export      SONAR_HOME=/usr/local/sonarqube-5.6.1
export      PATH=${SONAR_HOME}/bin:${PATH}

並修改配置檔案 sonar.properties,如下:

# sonar.jdbc.username=root
#sonar.jdbc.password=root
#sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?
useUnicode=true&characterEncoding=
utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
#option properties
sonar.jdbc.driverClassName:com.mysql.jdbc.Driver

基本配置完成,在命令列啟動 SonarQube:進入 SonarQube 安裝目錄,進入 bin 目錄,執行 ./sonar.sh start,開啟http://localhost:9000,如果顯示SonarQube 主頁, 則 SonarQube 安裝成功。如圖 2。

圖 2. SonarQube 啟動頁面

如果需要關閉 SonarQube,則執行 ./sonar.sh stop

如果需要重啟 SonarQube,則執行 ./sonar.sh restart

SonarQube Scanner

下載 Sonar-Scanner-2.6.1,解壓到目錄(可解壓到任意目錄)。修改系統路徑 path,如下:

#sonar-scanner profile
export      SONAR_SCANNER_HOME=/usr/local/sonar-scanner-2.6.1
export      PATH=${SONAR_SCANNER_HOME}/bin:${PATH}

修改 conf 目錄的配置檔案 sonar-scanner.properties,具體如下:

sonar.jdbc.username=root
sonar.jdbc.password=root
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode
=true&characterEncoding=utf8&rewriteBatchedStatements=true&
useConfigs=maxPerformance
sonar.sourceEncoding=UTF-8
sonar.login=admin
sonar.password=admin

在命令列中執行 sonar-runner -h 如果顯示以下內容,則安裝成功。 如圖 3。

圖 3. Sonar-Runner

Jenkins 與 SonarQube 整合外掛的安裝與配置

Jenkins 是一個支援自動化框架的伺服器,我們這裡不做詳細介紹。Jenkins 提供了相關的外掛,使得 SonarQube 可以很容易地整合。登陸 jenkins,點選”系統管理”,如圖 4。

圖 4. Jenkins 系統管理

點選管理外掛。

Jenkins 管理外掛

在可選外掛中搜索”SonarQube”並安裝它,如圖 5。

圖 5. Jenkins 安裝 SonarQube 外掛

進入 Jenkins 系統管理 – 系統設定,配置 SonarQube Server 資訊,如圖 6。

圖 6. Jenkis 配置 SonarQube Server

進入 Jenkins 系統管理 – Global Tool Configuration,配置 SonarQube Scanner,如圖 7。

圖 7. Jenkis 配置 SonarQube Scanner

新建 Jenkins 專案

登陸 Jenkins 平臺,點選新建,如圖 8。

圖 8. 新建 Jenkis 專案

這裡有兩種方法使用 SonarQube Scanner 進行程式碼分析,第一種是使用構建後步驟,第二種是在構建的過程中增加 SonarQube Scanner 的步驟,下面我們來分別介紹這兩種方法。

在 Jenkins 專案中使用構建後步驟進行程式碼分析

使用構建後步驟進行程式碼分析需要使用 Maven 對程式碼進行編譯,所以需要有 Maven 的配置檔案,例如 pom.xml。

為新建的 Jenkins 專案配置構建後操作步驟,在構建後步驟配置視窗中需要填入 Maven 的構建配置 xml 檔案,如圖 9、10。

圖 9. 新建構建後操作步驟

圖 10. 配置構建後操作步驟

在 Jenkins 專案構建過程中加入 SonarScanner 進行程式碼分析

首先需要在新建的 Jenkins 專案的構建環境標籤頁中勾選”Prepare SonarQube Scanner evironment”,如圖 11。

圖 11. 配置構建後操作步驟

增加構建步驟 “Execute SonarQube Scanner”,如圖 12。

圖 12. 增加 Execute SonarQube Scanner 構建步驟

配置 SonarQube Scanner 構建步驟,在 Task to run 輸入框中輸入 scan,即分析程式碼;在 JDK 選擇框中選擇 SonarQube Scanner 使用的 JDK(注意這裡必須是 JDK 不能是 JRE);Path to project properties 是可選擇的輸入框,這裡可以指定一個 sonar-project.properties 檔案,如果不指定的話會使用專案預設的 properties 檔案;Analysis properties 輸入框,這裡需要輸入一些配置引數用來傳遞給 SonarQube,這裡的引數優先順序高於 sonar-project.properties 檔案裡面的引數,所以可以在這裡來配置所有的引數以替代 sonar-project.properties 檔案,下面列出了一些引數,sonar.language 指定了要分析的開發語言(特定的開發語言對應了特定的規則),sonar.sources 定義了需要分析的原始碼位置(示例中的$WORKSPACE 所指示的是當前 Jenkins 專案的目錄),sonar.java.binaries 定義了需要分析程式碼的編譯後 class 檔案位置;Additional arguments 輸入框中可以輸入一些附加的引數,示例中的-X 意思是進入 SonarQube Scanner 的 Debug 模式,這樣會輸出更多的日誌資訊;JVM Options 可以輸入在執行 SonarQube Scanner 是需要的 JVM 引數。如圖 13。

sonar.projectKey=testSonar
sonar.projectName=testSonar
sonar.projectVersion=1.0
sonar.language=java
sonar.java.binaries=$WORKSPACE/testSonar/target/test-classes/
 sonar.sources=$WORKSPACE/testSonar/src
圖 13. 配置 Execute SonarQube Scanner 構建步驟

檢視分析結果

在新建的 Jenkins 專案的構建的 Console Output 中可以得到 SonarQube 分析結果的連結,如圖。

開啟構建結果的連結來檢視具體的分析報告,如 圖 1 2。

圖 12. 分析結果報告

點選質量閾圖示以檢視具體的問題,如 圖 1 3、14。

圖 13. 具體問題展示

圖 14. 具體問題展示

參考資源