SonarQube


前言

隨着項目團隊規模日益壯大,項目代碼量也越來越多。且不說團隊成員編碼水平層次不齊,即便是老手,也難免因為代碼量的增加和任務的繁重而忽略代碼的質量,最終的問題便是bug的增多和代碼債務的堆積。

因此,代碼review便日益提上了日程。當然人工review的效率還是相當低下的,於是我們采用了自動化代碼review的工具,便是今天的主角:SonarQube。

 

SonarQube簡介

官方網站:https://www.sonarqube.org/

SonarQube 是一個用於管理源代碼質量開放平台,它可以從多個維度檢測代碼質量,可以快速的定位代碼中潛在的或者明顯的 Bug、錯誤。

它支持包括 Java、Python、Php、C/C++、C#、HTML、JavaScript、PL/SQL、Objective C 等二十多種編程語言的代碼質量管理與檢測。可作為我們日常開發中檢測代碼質量的重要工具。

SonarQube® 可以與您現有的工作流程集成,以便在項目分支和拉取請求之間進行連續的代碼檢查。比如:

  • SonarQube集成gitlab,在分支推送的時候自動進行代碼檢查分析,生成代碼報告。
  • SonarQube集成jenkins,在代碼構建的時候自動進行代碼分析,生成代碼報告。

總之,SonarQube是可以配合一切好用的CI/CD工具進行自動化分析代碼並生成代碼報告,通過報告我們可以看到代碼中可能存在的bug和代碼債務。

 

環境、軟件准備

以下是安裝的軟件及版本:

  • 服務器:CentOS7
  • SonarQube:version 7.7
  • Jdk:version 1.8.0_91
  • Maven:version 3.5.3
  • Mysql: version 5.7.15

注意:下邊我們要演示 Maven 項目如何使用 SonarQube 分析,所以需要先安裝 Maven、Jdk,SonarQube 安裝我們使用 Mysql 作為數據存儲,所以需要先安裝 Mysql,這里 Maven、Jdk、Mysql 的安裝忽略。

 

SonarQube安裝

本文下載的版本是Sonarqube-7.7

下載地址:https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.7.zip

SonarQube 的安裝包是不分平台的,默認把所有平台的運行命令都下載下來,使用者根據不同環境運行不同的運行腳本。

1、下載SonarQube安裝包
[root@Zabbix ~]# wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.7.zip

2、解壓SonarQube安裝包

[root@Zabbix ~]# unzip sonarqube-7.7.zip
[root@Zabbix ~]# mv sonarqube-7.7 /usr/local/sonarqube
  • bin:目錄存放了各個環境的啟動腳本
  • conf:目錄存放着sonarqube的配置文件
  • logs:目錄存放着啟動和運行時的日志文件
  • data:用來存放數據,SonarQube默認使用 h2 數據庫存儲,同時支持其他如Mysql、Orace、Mssql、Postgresql數據庫存儲

3、配置SonarQube

# 我們首先需要通過配置文件修改sonarqube的Mysql連接字符串等信息,打開conf目錄的sonar.properties

[root@Zabbix ~]# vim /usr/local/sonarqube/conf/sonar.properties

端口的配置按照默認配置:

sonar.web.port=9000
sonar.search.port=9001

配置數據庫信息:

sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://MYSQLSERVER_IP:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true

注:Mysql版本需大於或等於5.6且小於8.0

4、創建數據庫及授權

mysql> create database sonarqube;
mysql> grant all on sonarqube.* to sonarqube@'%' identified by '123456';
mysql> flush privileges;

5、啟動SonarQube

啟動需要授權給一個非root的用戶,sonarqube及其es等軟件禁止root賬戶啟動,因此需要切換一個非root賬戶,授權的用戶需要有bin目錄及其子目錄的讀取和可執行的權限。

然后我們找到對應平台的腳本,我的系統是64位的linux,進入linux-x86-64目錄

# 授權

[root@Zabbix ~]# chown -R admin.admin /usr/local/sonarqube

# 啟動

[root@Zabbix ~]# su - admin
[admin@Zabbix ~]$ /usr/local/sonarqube/bin/linux-x86-64/sonar.sh start

# 查詢端口

[admin@Zabbix ~]$ netstat -lntup

# 啟動之后,我們瀏覽器訪問對應服務器IP地址的9000端口(防火牆要提前放行9000端口)

如果沒有成功,那么就在logs目錄查看啟動日志。一般有幾種:

  • 1)es.log         # ES或Mysql等數據庫連接報錯,一般是Mysql的連接字符串賬號密碼錯誤或者sonar賬號權限不夠;
  • 2)es.log         # 數據庫初始化失敗MySQL sonar賬戶權限不足
  • 3)sonar.log    # sonar服務的啟動日志
  • 4)web.log      # sonarqube web的啟動日志

6、訪問SonarQube

# 默認賬號密碼admin

# 登錄后界面

7、Plugins 插件安裝

SonarQube 插件安裝非常簡單,同時 官網插件庫 提供了很多實用的插件供大家下載使用。SonarQube已經默認給我們安裝了一些很常用的插件,我們可以通過admin登錄,點擊 配置 -> 系統 -> 更新中心 -> Installed 查看。

SonarQube 支持分析的語言有很多,像Java、Python、Php、C/C++、C#、HTML、JavaScript、PL/SQL、Objective C等20+語言,當我們需要支持分析什么語言時,只需要去插件中心安裝對應語言的插件即可,非常方便,可擴展性強。

這里我們演示安裝兩個很實用的插件,一個是 Chinese Pack(SonarQube的漢化包),一個是 Checkstyle(檢測代碼風格)。

# Chinese Pack 插件安裝

登陸之后點擊administration:

安裝完之后看頁面上邊:

之后再次登陸就更新了:

# Checkstyle 插件安裝

在 SonarQube 網頁上直接點擊安裝。admin 登錄,點擊 配置 -> 系統 -> 更新中心 -> Available -> Search,輸入 CheckStyle,

在搜素結果中找到 CheckStyle 插件點擊 Install,等待下載完成后,按照頁面提示點擊 Restart 自動重啟服務即可完成安裝。

SonarQube分析Maven項目

1、在maven的中找到setting配置文件。在setting.xml中增加sonarqube配置。如下:

<settings>
    <pluginGroups>
        <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
    </pluginGroups>
    <profiles>
        <profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <!-- 配置 Sonar Host地址,默認:http://localhost:9000 -->
                <sonar.host.url>http://myserver:9000/sonar/</sonar.host.url>
          <sonar.login>7895sdf8594sdfs65ewfds9854seese65</sonar.login> </properties> </profile> </profiles> </settings>

2、然后就可以在我們 Maven 工程目錄執行:

mvn clean verify sonar:sonar 或 mvn clean install sonar:sonar

注:如果是使用jenkins和maven編譯,還可在jenkins上具體項目中的構建中配置:

clean verify sonar:sonar -Dsonar.projectVersion=$appVersion -Dsonar.projectKey=ups_sas

3、執行完畢之后,可以去 web頁面查看分析結果:

http://myserver:9000/sonar/

 

SonarQube與Jenkins集成

1.   安裝Jenkins

這里不介紹。

2.  安裝SonarQube Scanner插件

2.1.  安裝插件

https://plugins.jenkins.io/sonar

 

安裝完后重啟jenkins。

2.2.  配置SonarQube

首先,在SonarQube中生成一個Token(PS:用token代替輸入用戶名和密碼):

然后,在Jenkins中配置連接sonarqube服務器的地址,這里用到的token就是剛才在sonarqube中創建的那個token:

最后,配置全局工具配置:

3.  創建任務

 

最最重要的是,配置SonarQube analysis properties

sonar.projectKey=ks-cms-unicorn
sonar.projectName=ks-cms-unicorn
sonar.projectVersion=1.0

sonar.language=java
sonar.sourceEncoding=UTF-8

sonar.sources=$WORKSPACE
sonar.java.binaries=$WORKSPACE

本例中,創建了兩個任務,方法同上。

 

可以看到,每次構建任務都會生成一次報告。這種方式比Maven那種方式要好很多,在實際的項目中多用此方式。

 

 

引用:

  • https://www.yangxingzhen.com/7262.html
  • https://www.cnblogs.com/cjsblog/p/10740840.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM