SonarQube是DevOps實踐中主流的一款質量內建工具,過插件機制,Sonar 可以集成不同的測試工具,代碼分析工具,以及持續集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。
通過不同的插件對這些結果進行再加工處理,通過量化的方式度量代碼質量的變化,從而可以方便地對不同規模和種類的工程進行代碼質量管理。同時 Sonar 還對大量的持續集成工具提供了接口支持,可以很方便地在持續集成中使用 Sonar。一般情況下,社區版還是可以滿足大部分場景的,即便是C/C++社區也是有其他開源插件的。
工作原理
SonarQube 並不是簡單地將各種質量檢測工具的結果(例如 FindBugs,PMD 等)直接展現給客戶,而是通過不同的插件算法來對這些結果進行再加工,最終以量化的方式來衡量代碼質量,從而方便地對不同規模和種類的工程進行相應的代碼質量管理。 SonarQube 在進行代碼質量管理時,會從圖 1 所示的七個緯度來分析項目的質量。
SonarQube 可以支持 25+ 種編程語言,針對不同的編程語言其所提供的分析方式也有所不同: 對於所有支持的編程語言,SonarQube 都提供源了代碼的靜態分析功能; 對於某些特定的編程語言,SonarQube 提供了對編譯后代碼的靜態分析功能,比如 java 中的 class file 和 jar 和 C# 中的 dll file 等; 對於某些特定的編程語言,SonarQube 還可以提供對於代碼的動態分析功能,比如 java 和 C# 中的單元測試的執行等。
遠程客戶機可以通過各種不同的分析機制,從而將被分析的項目代碼上傳到 SonarQube server 並進行代碼質量的管理和分析,SonarQube 還會通過 Web API 將分析的結果以可視化、可度量的方式展示給用戶
軟硬件要求
- 硬件上對磁盤讀寫性能要求高,服務涉及elasticsearch索引,IO讀寫和分析的代碼量直接影響sonarqube性能;實際生產環境建議使用專用高速I/O存儲
- SonarQube server 不支持32位,但 SonarQube scannner支持32位
- SonarQube server 僅支持Java11; SonarQube scanners 同時支持Java8&11
- 數據庫支持PostgreSQL, MSSQL Server, Oracle, 不再支持Mysql
版本分類
類型 | 全稱 | 說明 |
---|---|---|
CE | Community Edition | 社區版 |
DE | Developer Edition | 開發版(具有CE版所有特性) |
EE | Enterprise Edition | 企業版(具有DE版所有特性) |
DCE | Data Center Edition | 數據中心版(具有EE版所有特性) |
特性費用對比
https://www.sonarsource.com/plans-and-pricing/community/
https://www.sonarsource.com/plans-and-pricing/developer/
https://www.sonarsource.com/plans-and-pricing/enterprise/
https://www.sonarsource.com/plans-and-pricing/data-center/
類型 | 價格 | LOC |
---|---|---|
CE | 免費 | - |
DE | 120歐元-5萬歐元 | 10萬行代碼-20M行代碼 |
EE | 1.5萬歐元-18萬歐元 | 1M行代碼-100M行代碼 |
DCE | 10萬歐元-上不封頂 | 20M代碼- |
CE-社區免費版本
除了支持15種編程語言,CE版還就有如下特性
- 支持5種IDE
- 支持60+的插件
- 支持SonarLint
- 支持Quality Gate
- 快速確認近期修改代碼的問題
開源版本不支持一個項目多分支的形式,只能按照特性分支的名稱來生成相對應的掃描項目(會產生很多Sonarqube項目)。
解決方案:假如這個項目有F1,F2等特性分支,在每次對其中特性分支構建掃描時會配置sonar掃描參數(projectName)為 “服務名稱_特性分支名稱”,這樣相當於每個特性分支都對應一個掃描項目。但又間接的帶來了一些問題。
- 每個特性分支生成一個項目,假如特性分支被刪除呢?或者分支很多呢?
- 對於SonarQube管理員來說很難管理,增加了任務負擔。
DE-開發者版本
相較於CE版,增加了C/C++、Objective-C、T-SQL、ABAP、PL/SQL和Swift等,詳細信息如下所示:
DE版具有CE版所有特性,在此基礎之上,該版本還有如下特性增強:
- 支持22種編程語言
- 支持Pull Request的分支代碼分析
- 安全性的增強:Security Hotspots & Security Vulnerabilities的全面支持
- 支持SonarLint的智能提示,更好地與IDE進行集成
EE-企業版本
相較於DE版,增加了Apex、COBOL、PL/1、RPG和VB6等五種,詳細信息如下所示:
EE版具有DE版所有特性,在此基礎之上,該版本還有如下特性增強:
- 支持27種編程語言
- 支持對於Portfolio的管理
- 提供OWASP / SANS的安全報告
- 提供可配置的SAST 分析引擎
DCE-數據中心版本
EE版具有EE版所有特性,此版本主要對於高可用性和橫向擴展性有更好的支持。
如何計算費用?
Sonarqube是按照掃描的行數進行計費的,以年為單位進行訂閱。關於行數如何解讀?假如你買100W行掃描量,那么這個量是被所有項目共享的,但掃描的行數超過100W行,分析服務將會終止。當然如果你刪除項目重置,掃描量就會恢復。