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行,分析服務將會終止。當然如果你刪除專案重置,掃描量就會恢復。