作者 陳彩華
文章轉載交流請聯絡 caison@aliyun.com
複製程式碼
最近公司引入了程式碼自動檢查平臺,技術選型是選擇SonarQube,總結如下:
1 概述
SonarQube(sonar)是一個開源平臺,用於管理原始碼的質量。 SonarQube不只是一個質量資料包告工具,更是程式碼質量管理平臺。 支援java, C#, C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等等二十幾種程式語言的程式碼質量管理與檢測。 SonarQube可以從以下七個維度檢測程式碼質量,而作為開發人員至少需要處理前5種程式碼質量問題。
- (1) 不遵循程式碼標準 SonarQube可以通過PMD,CheckStyle,Findbugs等等程式碼規則檢測工具規範程式碼編寫。
- (2) 潛在的缺陷 SonarQube可以通過PMD,CheckStyle,Findbugs等等程式碼規則檢測工具檢 測出潛在的缺陷。
- (3) 糟糕的複雜度分佈 檔案、類、方法等,如果複雜度過高將難以改變,這會使得開發人員 難以理解它們, 且如果沒有自動化的單元測試,對於程式中的任何元件的改變都將可能導致需要全面的迴歸測試。
- (4) 重複 顯然程式中包含大量複製貼上的程式碼是質量低下的,SonarQube可以展示 原始碼中重複嚴重的地方。
- (5) 註釋不足或者過多 沒有註釋將使程式碼可讀性變差,特別是當不可避免地出現人員變動時,程式的可讀性將大幅下降 而過多的註釋又會使得開發人員將精力過多地花費在閱讀註釋上,亦違背初衷。
- (6) 缺乏單元測試 SonarQube可以很方便地統計並展示單元測試覆蓋率。
- (7) 糟糕的設計 通過SonarQube可以找出迴圈,展示包與包、類與類之間的相互依賴關係,可以檢測自定義的架構規則 通過SonarQube可以管理第三方的jar包,可以利用LCOM4檢測單個任務規則的應用情況, 檢測耦合。
通過以下介紹如何基於Jenkins和SonarQube完成程式碼質量持續檢測。
2 環境準備
清單如下,安裝方法自行百度谷歌
- Java環境
- Maven環境
- SonarQube平臺
- Jenkins平臺
- 資料庫(例如MySQL)
3 環境配置
3.1 Maven
為了基於Maven方式使用Jenkins,需要在Maven安裝目錄下的conf/setting.xml檔案配置關於sonar的配置
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- 平臺登入的賬號的使用者名稱 -->
<sonar.login>你的使用者名稱</sonar.login>
<!-- SonarQube平臺登入的賬號的密碼 -->
<sonar.password>你的密碼</sonar.password>
<!-- SonarQube訪問地址 -->
<sonar.host.url>http://sonar.ibeiliao.net:9000</sonar.host.url>
<!-- 程式碼分析包括哪些檔案需要分析,英文逗號分隔 -->
<sonar.inclusions>**/*.java,**/*.xml</sonar.inclusions>
</properties>
</profile>
複製程式碼
並使用 sonar 啟用profile

4 使用說明
4.1 Jenkins
建立一個新任務:
-
步驟1 建立 選擇構建一個自由風格的軟體專案
-
步驟2 配置原始碼管理 這裡是使用了Git來做原始碼管理,gitlab作為原始碼庫 專案分支填寫master
-
步驟3 配置構建觸發器 這裡配置H 18 * * *,代表每日18點前定時構建
-
步驟4 配置構建 第一行使用jacoco外掛,進行程式碼覆蓋率測試 第二行使用sonar外掛,進行程式碼檢測並提交檢測結果
clean org.jacoco:jacoco-maven-plugin:prepare-agent install -Dmaven.test.failure.ignore=true -P dev
sonar:sonar
複製程式碼

- 步驟5 配置構建後步驟,發郵件
需要在Jenkins提前配置好郵箱
4.2 SonarQube
SonarQube基本架構圖

SonarQube與專案持續整合架構圖

4.2.1 SonarQube說明
4.2.2 開發者本地基於Maven使用SonarQube
Jenkins的每日構建預設是使用master,在開發過程中,有時需要在開發者的開發中的分支進行程式碼檢測 方法:
-
步驟1 配置Maven 按照 3.1 Maven的配置說明,配置本地的Maven環境
-
步驟2 觸發檢測 在專案頂層目錄,執行命令:mvn sonar:sonar即可
4.2.3 相關指標說明


4.2.4 程式碼質量閾

程式碼整體質量的統計,可以幫助使用者理解專案是否已經可以投入生產
預設配置(可以根據專案實際情況重新配置):

後期展望
- 目前只接入了Java程式碼檢測,後期會將客戶端,前端的程式碼檢測也引入
- 歷史問題結合實際情況分階段、逐步修復
- 定時總結,減少或避免在新專案,新程式碼引入同樣質量問題
(本文同時發表於作者個人部落格 www.jianshu.com/u/ced6b70c7…)