sonarqube+jenkins實現持續CodeReview

這裏寫圖片描述

介紹篇

SonarQube 介紹

SonarQube 是 一個開源的代碼質量分析平臺,便於管理代碼的質量,可檢查出項目代碼的漏洞和潛在的邏輯問題。同時,它提供了豐富的插件,支持多種語言的檢測,
如 Java、Python、Groovy、C、C++等幾十種編程語言的檢測。它主要的核心價值體現在如下幾個方面:

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

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

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

SonarQube 工作流程

SonarQube 在進行代碼質量管理時,會從下圖 所示的七個緯度來分析項目的質量。
這裏寫圖片描述

SonarQube 需要數據庫的支持,用於存儲檢測項目後的分析數據,同時爲了實現可持續監測,還需要持續集成工具(如Jenkins)的支持,在構建版本前,通過Jenkins+Sonar 插件執行項目分析指令,最終的結果會通過SonarQube 服務器的Web 頁面展示。下圖是使用SonarQube做代碼持續審查的流程圖:

這裏寫圖片描述

開發人員把代碼push到SCM(如gitlab)【上圖第2步】,jenkins構建定義好的job,然後通過jenkins 插件(sonar scanner)分析源碼【上圖第3步】,jenkins把分析報告發到sonarqube server【上圖第4步】。

安裝篇

環境準備

  • Sonarqube 5.5
  • Sonarqube Scanner 2.4
  • MySQL 5.6
  • jenkins 2.53
  • JDK 1.7.0_79
  • CentOS release 6.5 (Final) 2.6.32-431.el6.x86_64

版本說明:

  • sonarqube5.6+ 必須要JDK1.8,所以JDK1.7下只能安裝sonar5.5 .
  • sonar scanner 2.5+後也要使用JDK1.8,所以JDK1.7下就要用scanner 2.4。
  • 爲安全起見,sonar的安裝和啓動不用root用戶,而是用低權限的linux用戶。

SonarQube安裝

1、數據庫配置

MySQL的安裝這裏不作介紹。並且本示例MySQL和SonarQube安裝在同一臺機器

創建SonarQube 服務所需的數據庫:

 mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; 
 mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonarpassword';
 mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonarpassword';
 mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonarpassword';
 mysql> FLUSH PRIVILEGES;

2、SonarQube配置

下載 SonarQube5.5 後解壓。按如下配置修改 $SONAR_HOME/conf/sonar.properties 文件:

sonar.jdbc.username=sonar
sonar.jdbc.password=sonarpassword
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance

sonar.web.host=0.0.0.0
sonar.web.context=/
sonar.web.port=9000

3、啓動SonarQube

進入sonar的bin目錄($SONAR_HOME/bin/linux-x86-64),執行腳本 sonar.sh start
瀏覽器中訪問 http://192.168.212.82:9000/ ,界面如下:

這裏寫圖片描述

默認登錄賬戶 admin 密碼 admin,可登錄後修改密碼。

3.A 配置sonarqube開機啓動

(1)添加sonar環境變量

修改 ~/.bash_profile


SONAR_HOME=/data/sonar/sonarqube-5.5
PATH=PATH:$SONAR_HOME/bin/linux-x86-64
export PATH SONAR_HOME
(2)/etc/init.d 下增加sonar 文件

#!/bin/sh
# chkconfig: 345 96 10
# description: SonarQube system
#
# Provides: sonar
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: SonarQube system 
# Description: SonarQube system

/usr/bin/sonar $*
(3)加入開機啓動列表
sudo ln -s $SONAR_HOME/bin/linux-x86-64/sonar.sh /usr/bin/sonar
sudo chmod 755 /etc/init.d/sonar
sudo chkconfig --add sonar

4、漢化

下載 sonarqube5.5 漢化包 ,是個jar包,放到$SONAR_HOME/extensions/plugins ,重啓sonarqube (sonar.sh restart)

Jenkins集成SonarQube Scanner

安裝 SonarQube Scanner插件

jenkins界面 系統管理->管理插件->高級 ,手動上傳hpi插件(因自動安裝scanner插件是大於2.4版本,要求JDK1.8,所以這裏手動安裝)

這裏寫圖片描述

先下載 SonarQube Scanner 2.4 for Jenkins ,再上傳。安裝後重啓jenkins。成功安裝後展示如下:

這裏寫圖片描述

配置SonarQube Server

告訴Jenkins: SonarQube Server在哪

Jenkins 系統管理 -> 系統設置:

這裏寫圖片描述

其中Server authentication token 是sonarqube Server的登錄憑證,在SonarQube後臺生成。只需登錄到sonarqube,創建一個用戶token:

這裏寫圖片描述

這裏寫圖片描述

添加Jenkins全局配置 - SonarQube Scanner

Jenkins 系統管理->全局配置(Global Tool Configuration)

這裏寫圖片描述

選擇自動安裝, Install from Maven Central ,sonarqube Scanner 2.4版本。

使用篇

使用SonarQube Scanner 分析源碼

這裏採取構建後分析源碼

這裏寫圖片描述

Analysis properties 填寫配置

  • sonar.projectKey=apigateway
  • sonar.projectName=apigateway #這個可自定義,報告發送到sonarqube後,sonarqube將創建以此命名的project
  • sonar.language=java #表示分析java源代碼
  • sonar.java.source=1.7 #表示jdk版本爲1.7
  • sonar.sources=${WORKSPACE}/src/main/java #表示源代碼的目錄

這裏寫圖片描述

查看分析結果

構建jenkins job後,分析結果將發送到sonarqube。

jenkins job構建結果

這裏寫圖片描述

sonarqube 分析結果

這裏寫圖片描述

小結

本文介紹了sonarqube的安裝、配置,以及結合jenkins來做持續的自動CodeReview。其中的安裝配置過程都是筆者親自試驗過的,可供讀者在參考。安裝配置時需注意各個軟件的版本。如果跟本文的版本有差異,安裝過程也會不盡相同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章