SonarQube之采購選型參考
SonarQube是DevOps實(shí)踐中主流的一款質(zhì)量?jī)?nèi)建工具,過插件機(jī)制,Sonar 可以集成不同的測(cè)試工具,代碼分析工具,以及持續(xù)集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。
?
通過不同的插件對(duì)這些結(jié)果進(jìn)行再加工處理,通過量化的方式度量代碼質(zhì)量的變化,從而可以方便地對(duì)不同規(guī)模和種類的工程進(jìn)行代碼質(zhì)量管理。同時(shí) Sonar 還對(duì)大量的持續(xù)集成工具提供了接口支持,可以很方便地在持續(xù)集成中使用 Sonar。一般情況下,社區(qū)版還是可以滿足大部分場(chǎng)景的,即便是C/C++社區(qū)也是有其他開源插件的。
?
工作原理
SonarQube 并不是簡(jiǎn)單地將各種質(zhì)量檢測(cè)工具的結(jié)果(例如 FindBugs,PMD 等)直接展現(xiàn)給客戶,而是通過不同的插件算法來對(duì)這些結(jié)果進(jìn)行再加工,最終以量化的方式來衡量代碼質(zhì)量,從而方便地對(duì)不同規(guī)模和種類的工程進(jìn)行相應(yīng)的代碼質(zhì)量管理。 SonarQube 在進(jìn)行代碼質(zhì)量管理時(shí),會(huì)從圖 1 所示的七個(gè)緯度來分析項(xiàng)目的質(zhì)量。
?

?
SonarQube 可以支持 25+ 種編程語言,針對(duì)不同的編程語言其所提供的分析方式也有所不同: 對(duì)于所有支持的編程語言,SonarQube 都提供源了代碼的靜態(tài)分析功能; 對(duì)于某些特定的編程語言,SonarQube 提供了對(duì)編譯后代碼的靜態(tài)分析功能,比如 java 中的 class file 和 jar 和 C# 中的 dll file 等; 對(duì)于某些特定的編程語言,SonarQube 還可以提供對(duì)于代碼的動(dòng)態(tài)分析功能,比如 java 和 C# 中的單元測(cè)試的執(zhí)行等。

遠(yuǎn)程客戶機(jī)可以通過各種不同的分析機(jī)制,從而將被分析的項(xiàng)目代碼上傳到 SonarQube server 并進(jìn)行代碼質(zhì)量的管理和分析,SonarQube 還會(huì)通過 Web API 將分析的結(jié)果以可視化、可度量的方式展示給用戶
?
軟硬件要求
- 硬件上對(duì)磁盤讀寫性能要求高,服務(wù)涉及elasticsearch索引,IO讀寫和分析的代碼量直接影響sonarqube性能;實(shí)際生產(chǎn)環(huán)境建議使用專用高速I/O存儲(chǔ)
- SonarQube server 不支持32位,但 SonarQube scannner支持32位
- SonarQube server 僅支持Java11; SonarQube scanners 同時(shí)支持Java8&11
- 數(shù)據(jù)庫支持PostgreSQL, MSSQL Server, Oracle, 不再支持Mysql
?
版本分類
| 類型 | 全稱 | 說明 |
|---|---|---|
| CE | Community Edition | 社區(qū)版 |
| DE | Developer Edition | 開發(fā)版(具有CE版所有特性) |
| EE | Enterprise Edition | 企業(yè)版(具有DE版所有特性) |
| DCE | Data Center Edition | 數(shù)據(jù)中心版(具有EE版所有特性) |

特性費(fèi)用對(duì)比
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/
| 類型 | 價(jià)格 | LOC |
|---|---|---|
| CE | 免費(fèi) | - |
| DE | 120歐元-5萬歐元 | 10萬行代碼-20M行代碼 |
| EE | 1.5萬歐元-18萬歐元 | 1M行代碼-100M行代碼 |
| DCE | 10萬歐元-上不封頂 | 20M代碼- |
CE-社區(qū)免費(fèi)版本

除了支持15種編程語言,CE版還就有如下特性
- 支持5種IDE
- 支持60+的插件
- 支持SonarLint
- 支持Quality Gate
- 快速確認(rèn)近期修改代碼的問題
開源版本不支持一個(gè)項(xiàng)目多分支的形式,只能按照特性分支的名稱來生成相對(duì)應(yīng)的掃描項(xiàng)目(會(huì)產(chǎn)生很多Sonarqube項(xiàng)目)。
?
解決方案:假如這個(gè)項(xiàng)目有F1,F(xiàn)2等特性分支,在每次對(duì)其中特性分支構(gòu)建掃描時(shí)會(huì)配置sonar掃描參數(shù)(projectName)為 “服務(wù)名稱_特性分支名稱”,這樣相當(dāng)于每個(gè)特性分支都對(duì)應(yīng)一個(gè)掃描項(xiàng)目。但又間接的帶來了一些問題。
- 每個(gè)特性分支生成一個(gè)項(xiàng)目,假如特性分支被刪除呢?或者分支很多呢?
- 對(duì)于SonarQube管理員來說很難管理,增加了任務(wù)負(fù)擔(dān)。
?
DE-開發(fā)者版本

相較于CE版,增加了C/C++、Objective-C、T-SQL、ABAP、PL/SQL和Swift等,詳細(xì)信息如下所示:

DE版具有CE版所有特性,在此基礎(chǔ)之上,該版本還有如下特性增強(qiáng):
- 支持22種編程語言
- 支持Pull Request的分支代碼分析
- 安全性的增強(qiáng):Security Hotspots & Security Vulnerabilities的全面支持
- 支持SonarLint的智能提示,更好地與IDE進(jìn)行集成
?
EE-企業(yè)版本

相較于DE版,增加了Apex、COBOL、PL/1、RPG和VB6等五種,詳細(xì)信息如下所示:

EE版具有DE版所有特性,在此基礎(chǔ)之上,該版本還有如下特性增強(qiáng):
- 支持27種編程語言
- 支持對(duì)于Portfolio的管理
- 提供OWASP / SANS的安全報(bào)告
- 提供可配置的SAST 分析引擎
DCE-數(shù)據(jù)中心版本

EE版具有EE版所有特性,此版本主要對(duì)于高可用性和橫向擴(kuò)展性有更好的支持。
如何計(jì)算費(fèi)用?
Sonarqube是按照掃描的行數(shù)進(jìn)行計(jì)費(fèi)的,以年為單位進(jìn)行訂閱。關(guān)于行數(shù)如何解讀?假如你買100W行掃描量,那么這個(gè)量是被所有項(xiàng)目共享的,但掃描的行數(shù)超過100W行,分析服務(wù)將會(huì)終止。當(dāng)然如果你刪除項(xiàng)目重置,掃描量就會(huì)恢復(fù)。
?


浙公網(wǎng)安備 33010602011771號(hào)