Sonar SonarQube Java Jenkins code scanner

使用SonarQube + Jenkins進行自動化程式碼品質分析

曾克維 2017/03/06 18:14:35
21697







主題

使用SonarQube + Jenkins進行自動化程式碼品質分析

文章簡介

介紹SonarQube環境建置,及如何整合至Jenkins

作者

曾克維

版本/產出日期

V1.0/2017.03.06


1. 前言

在軟體開發的生命週期,如何讓程式維持高品質一直是個重要的課題,但若是以人工的方式檢驗程式是否存在安全漏洞(Vulnerability)、不好的寫法(code smell),卻是一個大工程,因此若能夠藉由一些自動化的工具來幫助我們維持程式品質,就可以減少人工code review的時間、人力成本,而SonarQube就是一套Open Source的程式碼品質分析工具。



2. 目的

了解SonarQube為何?

了解如何安裝SonarQube

了解如何分析程式碼

了解如何整合至Jenkins





3. SonarQube簡介

SonarQube可以分為兩個部分,一個部分是負責執行程式碼分析的Runner,依語言種類有所不同,Sonar可支援25種以上的程式語言,如:Java、C#、JavaScript、Python…等等。

另一個部分是經過程式碼分析後,可以在SonarQube的報表網站檢視程式碼的分析報告,能夠清楚的了解當前程式碼潛在的問題,使我們能夠及早發現並迅速修復




4. SonarJava簡介

SonarJava是其中一個Runner,負責Java的程式碼分析,SonarJava提供397個分析規則,其中包含149個用來識別Bug,217個用來識別code smells,31個用來識別漏洞。


這些規則可以檢測軟體品質相關的問題,例如:UNUSED CODE, LOGIC ERROR, CODING CONVENTION, PERFORMANCE HOTSPOT, RESOURCE LEAK, MULTI-THREADING, NULL-POINTER DEREFERENCE, ERROR HANDLING…等等。


其中許多規則都可用來強制遵守以下幾個標準:

CWE (Common Weakness Enumeration)

CERT (Computer Emergency Response Team)

OWASP TOP TEN (Open Web Application Security Project)

SANS TOP 25



5. 開始前準備

JDK8

MySQL 5.7

MySQL Workbench

Maven 3.x

Jenkins



6. 安裝SonarQube

安裝環境需求包含三個部分:

1. JAVA

2. Database (存放專案資訊、掃描規則等等)

3. Web Browser (開啟管理介面)


SonarQube執行環境需求版本如下:


JAVA

Oracle JRE

8

Database

Microsoft SQL Server

2012 (MSSQL Server 11.0)

2014 (MSSQL Server 12.0)

MySQL

5.6

5.7

Oracle

11G

12C

PostgreSQL

8.x

9.x

Web Browser

Microsoft Internet Explorer

IE 11

Microsoft Edge

Latest

Mozilla Firefox

Latest

Google Chrome

Latest

Safari

Latest


安裝步驟:


1. https://www.sonarqube.org下載


2. 解壓縮至D:\sonarqube-6.2



3. 建立一個名為sonarDB(字元編碼設定UTF-8)、名為sonaruser




4. 給予user權限能夠在DB sonar新增、修改、刪除物件


5. SonarQube設定,開啟D:\sonarqube-6.2\conf\sonar.properties


6. 加入DB連線設定:

sonar.jdbc.url

sonar.jdbc.username

sonar.jdbc.password


7. 設定Web Server,若設定,預設為http://localhost:9000

sonar.web.host

sonar.web.port


8. 啟動SonarQube Server,若是Windows系統執行路徑下的\bin\ windows-x86-64\StartSonar.bat,若是Linux系統執行路徑下的\bin\ linux-x86-64\sonar.sh



9. 使用瀏覽器開啟先前設定的位置或預設的http://localhost:9000 ,可使用預設的管理員身分登入,帳號:admin,密碼:admin,即可看到Sonar頁面


10. 使用Maven驅動scanner,支援Maven版本3.x

在想要進行分析的Maven專案下的pom.xml檔加入以下plugin來驅動Sonar進行程式碼分析


在專案pom.xml檔所在位置執行以下命令


分析完成後,Sonar分析報告即會出現在頁面上


7. 整合至Jenkins

1. Jenkins上安裝「SonarQube Scanner for Jenkinsplugin


進入「管理Jenkins


進入「管理外掛程式」


搜尋「sonar」,並安裝SonarQube Scanner for Jenkins


2. 安裝SonarQube Scanner 用來驅動sonar掃描source code


進入「管理Jenkins」→「Global Tool Configuration


找到「SonarQube Scanner」的部分,點選「SonarQube Scanner 安裝」


給予「Name」,勾選「自動安裝」,選擇安裝版本,並儲存設定


3. 設定SonarQube資訊


進入「管理Jenkins」→「設定系統」


找到「SonarQube servers」的區塊,點選「Add SonarQube


填入已安裝的SonarQube相關資訊,並儲存設定


4. 在一個Job的組態設定中加入一個「建置」


進到一個Job頁面,點選「組態」


找到「建置」區塊,點選「新增建置步驟」,選擇「Execute SonarQube Scanner


在欄位「Analysis properties」填入必要的設定參數,包含:

sonar.projectKey:專案ID

sonar.sources:想要分析的Source code資料夾


5. 馬上建置看看


6. 建置完成後,在工作狀態頁面顯示出SonarQube分析狀態


7. 點選sonar圖示,可導到sonar介面查看詳細報告





8. 參考來源

https://dotblogs.com.tw/kirkchen/2016/06/04/sonarqube-introduction - SonarQube簡介

https://dotblogs.com.tw/kirkchen/2016/06/18/setup-sonarqube-on-azure - SonarQube安裝設定

曾克維
565B8C13AB220AD1D6421111AD8FA0E7
2019/07/04 04:08:42

  您好,讀完您的這篇文章後真的讓我受益良多,用圖檔來解釋真的幫助很多,但是小弟的資質很差,所以有些不太了解的地方,不曉得能否像您請教。

 我這邊遇到的問題是這樣的,我們在安裝步驟的第9點我們一開始是去到maven下載的地方,召喚出此資料夾的程黑框後,執行mvn clean sonar:sonar這段程式,但最後的結果是建立失敗的,接著我拼接了其他網站給出的文章後,嘗試了用eclipse去建立一個maven的檔案,接著檔案建立好後,我使用了同樣的方法後,結果卻是建立成功的在locallhost裡也出現了同樣的東西,但在eclipse裡package的地方出現了BUG,卻遲遲無法做出解決。

  所以這邊想請問兩個問題,第一點:sonarQube能否直接放入檢測的物品,以及他是否算是一個建立專案的地方,能夠直接不用Jenkin就能夠做了,第二不曉得除了像小弟使用的eclipse創造出maven以外能否使用其他軟體呢。