使用SonarQube + Jenkins進行自動化程式碼品質分析
主題: |
使用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)
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 |
• 2012 (MSSQL Server 11.0) • 2014 (MSSQL Server 12.0) |
|
• 5.6 • 5.7 |
||
• 11G • 12C |
||
• 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. 建立一個名為sonar的DB(字元編碼設定UTF-8)、名為sonar的user
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 Jenkins」plugin
• 進入「管理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安裝設定
您好,讀完您的這篇文章後真的讓我受益良多,用圖檔來解釋真的幫助很多,但是小弟的資質很差,所以有些不太了解的地方,不曉得能否像您請教。
我這邊遇到的問題是這樣的,我們在安裝步驟的第9點我們一開始是去到maven下載的地方,召喚出此資料夾的程黑框後,執行mvn clean sonar:sonar這段程式,但最後的結果是建立失敗的,接著我拼接了其他網站給出的文章後,嘗試了用eclipse去建立一個maven的檔案,接著檔案建立好後,我使用了同樣的方法後,結果卻是建立成功的在locallhost裡也出現了同樣的東西,但在eclipse裡package的地方出現了BUG,卻遲遲無法做出解決。
所以這邊想請問兩個問題,第一點:sonarQube能否直接放入檢測的物品,以及他是否算是一個建立專案的地方,能夠直接不用Jenkin就能夠做了,第二不曉得除了像小弟使用的eclipse創造出maven以外能否使用其他軟體呢。