SonarQube 是一款領先的持續代碼質量監控平臺,開源在github 上,如今已更新到6.2 版本,star 數量超過 1400+,能夠輕鬆配置在內網服務器,實時監控代碼,幫助瞭解提高提高團隊項目代碼質量。經過插件機制,SonarQube能夠繼承不一樣的測試工具,代碼分析工具,以及持續集成工具。javascript
與持續集成工具(例如 Hudson/Jenkins 等)不一樣,SonarQube 並非簡單地把不一樣的代碼檢查工具結果(例如 FindBugs,PMD 等)直接顯示在 Web 頁面上,而是經過不一樣的插件對這些結果進行再加工處理,經過量化的方式度量代碼質量的變化,從而能夠方便地對不一樣規模和種類的工程進行代碼質量管理。html
在對其餘工具的支持方面,Sonar 不只提供了對 IDE 的支持,能夠在 Eclipse 和 IntelliJ IDEA 這些工具裏聯機查看結果;同時 SonarQube 還對大量的持續集成工具提供了接口支持,能夠很方便地在持續集成中使用 SonarQube。java
此外,SonarQube 的插件還能夠對 Java 之外的其餘編程語言提供支持,對國際化以及報告文檔化也有良好的支持。python
行業內提到"代碼質量管理, 自動化質量管理", 通常指的都是經過Sonar來實現。本文的目標是實如今Sonar上顯示出iOS項目, 先看張最終的效果圖:mysql
用Sonar可以實現什麼?git
問題1: "規則"指的是什麼? github
在Sonar工具中配置檢測工具(規則), 而後sonar根據規則檢測"質量報告文件", 得出問題數目。 好比本文配置的規則是OCLint複製代碼
問題2: 技術債務的天數怎麼得出?web
每一個規則都有對應的處理時間, 最後:問題類型1數目 * 對應時間 + 問題類型2數目 * 對應時間 +... 獲得時間。複製代碼
SonarQube 並非簡單地將各類質量檢測工具的結果(例如 FindBugs,PMD 等)直接展示給客戶,而是經過不一樣的插件算法來對這些結果進行再加工,最終以量化的方式來衡量代碼質量,從而方便地對不一樣規模和種類的工程進行相應的代碼質量管理。objective-c
SonarQube 在進行代碼質量管理時,會從圖 1 所示的七個緯度來分析項目的質量。算法
SonarQube 不是那種安裝便可用的工具,他須要數據庫的支持,用於存儲檢測項目後的分析數據,同時爲了實現可持續監測,還須要項目持續集成工具(如Jenkins)的支持,在構建版本前,經過Jenkins+Sonar 插件執行項目分析指令,最終的結果會經過SonarQube 服務器的Web 頁面展現。
下面咱們就經過mysql+Jenkins+SonarQube 實現項目代碼質量的可持續監測
SonarQube 的安裝一般須要知足必定的軟硬件條件,具體要求以下所示:
Server 要求
Web server 最少須要 500MB 的內存空間,推薦內存空間大小 2GB。Sonar 在進行代碼質量分析時,一般大約每 1 KLOC 須要存儲 350KB 左右的數據,因此要儘可能爲 SonarQube 的 web server 提供大的內存。
Database 要求
儘管 SonarQube 自己自帶嵌入的 Derby 數據庫,可是因爲 Derby 比較簡單,因此在生產環境中強烈推薦安裝相應的企業版數據庫,SonarQube 支持的數據庫包括: MySQL 5.x+、Oracle10g+、PostgreSQL 9.x 和 MS SQLServer 2005 and 2008,推薦使用 MySQL。
Browser 要求
SonarQube 支持大多數的瀏覽器,包括 Firefox、Internet Explorer 7.x and 8.x and chromed 等,推薦使用 chromed。
目前官方最新的版本是6.2,可是對於部分插件會存在不兼容的問題,致使Sonar 服務啓動失敗,因此爲了使用和演示,我採用了舊版本4.5.7,由於此版本兼容 sonar-objective-c-plugin-0.3.1 插件。
更新:
關於XCode8的兼容方案, 請看這篇文章
數據庫配置
進入數據庫命令模式或者直接使用GUI 工具,建立Sonar-Qube 服務所需的數據庫
mysql -u root -p
mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonar';
mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
mysql> FLUSH PRIVILEGES;複製代碼
完成之後測試一下鏈接是否正確
安裝SonarQube 與SonarQube-Runner
SonarQube Runner 2.4 下載地址
從官網下載 SonarQube 的最新版本並解壓到/usr/local/
文件夾
添加SONAR_HOME、SONAR_RUNNER_HOME 環境變量,並將SONAR_RUNNER_HOME 加入PATH
修改Sonar-Qube 配置文件
配置文件路徑在 ./conf/sonar.properties
# 設置數據庫的帳戶密碼
sonar.jdbc.username=ua
sonar.jdbc.password=pwd
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
# By default, ports will be used on all IP addresses associated with the server.
sonar.web.host=0.0.0.0
# The default value is root context (empty value).
sonar.web.context=/
# TCP port for incoming HTTP connections. Default value is 9000.
sonar.web.port=9003複製代碼
運行以下命令啓動 Sonar-Qube,根據操做系統選擇
Last login: Wed Feb 15 18:15:05 on ttys000
localhost:~ tianyi$ /usr/local/sonarqube-6.2/bin/macosx-universal-64/sonar.sh start
localhost:~ tianyi$ /usr/local/sonarqube-6.2/bin/macosx-universal-64/sonar.sh start
Starting SonarQube...
Started SonarQube.複製代碼
建立一個簡單的工程
默認密碼是admin:admin,登錄管理員帳號之後,配置系統參數
建立一個Demo 工程
Demo 工程簡介
由於尚未進行過度析,因此Demo 暫時只能配置,在使用篇咱們會詳細介紹若是經過指令或自動化執行分析審查。
安裝一些必備插件,均可以從官網或者github 上搜索到
Sonar支持多種插件,插件的下載地址爲:docs.codehaus.org/display/SON…
將下載後的插件上傳到${SONAR_HOME}extensions\plugins目錄下,從新啓動sonar。
(注意版本號兼容性問題)
已安裝SonarQube Runner且環境變量已配置,即sonar-runner命令可在任意目錄下執行
如何配置環境變量,參考這篇文章
1. 在項目源碼的根目錄下建立sonar-project.properties配置文件
以iOS 項目爲例
# Required metadata
sonar.projectKey=iOS::Demo
sonar.projectName=iOS::Demo
sonar.projectVersion=1.0
# Comma-separated paths to directories with sources (required)
sonar.sources=Demo
# Language
sonar.language=objectivec
# Encoding of the source files
sonar.sourceEncoding=UTF-8複製代碼
注意:sonar.language 和安裝的代碼審查插件有關,須要安裝 sonar-objective-c 插件,不然運行時會提示沒法找到這個語言
2. 執行分析
在項目的根目錄執行分析指令
/usr/local/sonar-runner-2.4/bin/sonar-runner複製代碼
查看Sonar 分析的結果
以上是建立Demo 工程後,經過手動執行分析指令完成代碼審查分析。
在jenkins的插件管理中選擇安裝SonarQube-Scanner,該插件可使項目每次構建都調用sonar進行代碼度量。
進入配置頁面對sonar插件進行配置,以下圖:
以上配置可使項目在構建前,自動執行代碼審查和分析,結果會自動保存並上傳到數據庫,經過Sonar 服務器展現給開發者。
每5分鐘檢查一次倉庫,如有上庫,則自動執行代碼檢測
至此,經過Sonar 初步構建代碼持續審查的工做完成。
資源找尋的問題
文中提到的資源文件,網上谷歌百度都用上,也找了好久,包括一些插件的問題,必須安裝的就是 Sonar-Qube,Runner 其實沒必要要安裝,由於Jenkins 裏有插件,能夠直接使用。
環境配置問題
若是不經常使用指令的話,能夠不配置,直接經過絕對路徑作操做,環境配置的方法參考這篇文章
初始化時遇到Sorry 的問題
遇到這種問題能夠去根目錄 /log/xx.log 中查看日誌,具體問題具體解決
漢化包的問題
若是你不習慣英文的使用,想作一作漢化的事情時,漢化包必定要對,若是有問題會致使服務啓動失敗。
附上:漢化包下載地址
在使用 SonarQube6.2 分析代碼質量時,可能會遇到的問題:
Xcode 8 兼容性問題
原有的xctool已不支持XCode8, 改用xcodebuild + xcpretty 來替代xctool環節生成對應的產出物。
關於XCode8的兼容方案, 請看這篇文章
代碼質量管理對提升項目質量意義重大。本文介紹了 SonarQube 的工做原理,並從項目實戰的角度講解了使用 SonarQube 進行項目代碼質量管理的流程和注意事項。
代碼規範貴在堅持與執行力,自動審查只是作了提醒的做用,固然根據語言的規則,不少規範在使用者來說看似不合理或者很差用,有了這個工具,參與者們能夠切身感覺到團隊的成長。