Sonarqube & ObjectiveC 環(huán)境搭建

前言

團隊開發(fā)中涕烧,代碼質(zhì)量的把關(guān),往往決定了一個團隊的開發(fā)維護效率汗洒。成員的增長议纯,業(yè)務的擴大,不同風格溢谤、不嚴謹?shù)拇a瞻凤,直接導致后續(xù)維護的高成本。
每個團隊都有自己的一套代碼檢查方式世杀。對于小團隊阀参,也有很多高效可擴展的開源工具。結(jié)合自己的實踐瞻坝,介紹下一種解決方案:sonarqube + gerrit + Jenkins蛛壳。
本篇介紹Mac上sonarqube的安裝,以及添加開源plugin對objective c支持所刀。環(huán)境配置比較多衙荐,文字較長...

所需安裝工具一覽
  • homebrew
  • Java JDK (推薦jdk而不是jre,最新的即可)
  • maven
  • xcode
  • xcpretty
  • sonarqube
  • sonar-scanner
  • oclint
  • SonarQube Plugin for Objective C

注: 安裝順序推薦如上排序勉痴。建議先閱讀下文赫模,了解各工具作用后再進行安裝

sonarqube 安裝與使用

SonarQube? software (previously called Sonar) is an open source quality management platform, dedicated to continuously analyze and measure technical quality, from project portfolio to method. If you wish to extend the SonarQube platform with open source plugins, have a look at our plugin library.

1. 環(huán)境要求(具體見官網(wǎng))
*   at least 2GB of RAM to run efficiently and 1GB of free RAM for the OS
*   disk space you need will depend on how much code you analyze
*   Database: [MySQL](http://www.mysql.com/)
*   Web Browser
2. 安裝sonarqube
  • download Download Page
  • Unzip & execute: sonar.sh console(解壓后目錄里有系統(tǒng)對應腳本)
# 主要命令一覽, 建議添加alias到~/.bash_profile
./sonar.sh console #Debug信息
./sonar.sh start #啟動服務
./sonar.sh stop #停止服務
./sonar.sh restart #重啟服務
  • Log in to http://localhost:9000 & 默認登錄/密碼: admin/admin
  • follow the tutorial to analyze your first project (無法添加project蒸矛,需要安裝數(shù)據(jù)庫和scanner)
  • 漢化方式:setting->market->搜Chinese
3. 安裝 & 配置數(shù)據(jù)庫(這里使用MySQL)

sonarqube內(nèi)嵌有數(shù)據(jù)庫瀑罗,但不能有額外操作,所以需要另外添加數(shù)據(jù)庫

# 直接使用homebrew雏掠,homebrew安裝方式請自查
brew install mysql #安裝
mysql.server start #啟動
mysql_secure_installation #基本配置
brew services start mysql #配置為系統(tǒng)服務

mysql管理gui斩祭,optional:

配置sonar的用戶和數(shù)據(jù)庫實例:

  • 創(chuàng)建sonar用戶和數(shù)據(jù)庫sonar,賦予sonar權(quán)限
mysql -u root -p #進入MySQL, root默認密碼為空
CREATE DATABASE sonar;
CREATE USER 'sonar'@'localhost' IDENTIFIED BY '你要設置的密碼’;
GRANT ALL PRIVILEGES ON sonar_qube.* TO 'sonar'@'localhost’;
FLUSH PRIVILEGES;

修改sonarqube數(shù)據(jù)庫配置

  • 到sonarquebe目錄配置\conf\sonar.properties中數(shù)據(jù)庫設置乡话,原文件相應行被注釋
sonar.jdbc.username=sonar
sonar.jdbc.password=你要設置的密碼
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar_qube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
  • restart sonarqube server摧玫,正常啟動,且不再有內(nèi)嵌數(shù)據(jù)庫提示
4. 安裝sonar-scanner & 配置

The SonarQube?Scanner is recommended as the default launcher to?analyze a project with SonarQube.

  • Installation
  • 解壓到安裝目錄,推薦添加bin目錄路徑到$PATH
export PATH=`pwd`/bin:$PATH >> ~/.bash_profile  # 或直接copy bin路徑到~/.bash_profile
  • 配置安裝目錄下的sonar-scanner.properties & 添加host.url
sonar.host.url=http://localhost:9000

對需檢測project執(zhí)行scanner命令
到project所在目錄诬像,添加sonar-project.properties(注意命名不要錯??)屋群。添加project相關(guān)信息sonar-project.properties中,例如

sonar.projectKey=testOC #projectKey required
sonar.sources=/Users/hotacool/dev/RACTest #project source required
sonar.projectName=test OC #server 展示名字
sonar.projectVersion=1.0 # version

在該工程sonar-project.properties所在目錄下坏挠,執(zhí)行sonar-scanner芍躏,進行掃描
打開server(http://localhost:9000/projects),可以看到projects掃描結(jié)果

5. oclint 安裝 & 使用

sonarqube對objectivec的代碼檢測降狠,需要依賴oclint對xcode工程的編譯log的分析結(jié)果对竣。簡單說下過程,對xcode工程進行xcodebuild榜配,輸出編譯log否纬,oclint對編譯log進行分析,輸出xml蛋褥,sonarqube根據(jù)xml來顯示可視化結(jié)果临燃。
OCLint is a static code analysis tool for improving quality and reducing defects by inspecting C, C++ and Objective-C code and looking for potential problems.

  • 安裝方式見官網(wǎng)。
    • Homebrew 簡單壁拉,但可能外網(wǎng)連不上
    • 推薦直接download包谬俄,解壓執(zhí)行文件路徑加入$PATH
  • 安裝完畢柏靶,終端執(zhí)行oclint
    • xcodebuild | tee xcodebuild.log | xcpretty -r json-compilation-database
    • 編譯工程并輸出log弃理,格式化log為json文件
    • Xcodebuild 指令需要添加編譯相關(guān)參數(shù)
xcodebuild archive -workspace 項目名稱.xcworkspace 
                       -scheme 項目名稱 
                       -configuration 構(gòu)建配置 
                       -archivePath archive包存儲路徑 
                       CODE_SIGN_IDENTITY=證書 
                       PROVISIONING_PROFILE=描述文件UUID
  • oclint的執(zhí)行,需要依賴xcpretty
  • Xcpretty 是編譯log format工具屎蜓,直接gem安裝
sudo gem install xcpretty
  • -r json-compilation-database 制定的數(shù)據(jù)的輸出格式為json格式痘昌。輸出的數(shù)據(jù)為build/reports/compilation_db.json
  • 使用oclint時需要將build/reports/compilation_db.json 重新命名為 compile_commands.json 并移動至當前目錄(工程文件目錄),執(zhí)行:
oclint-json-compilation-database -- -report-type pmd -o oclint.xml #輸出xml
oclint-json-compilation-database -e Pods -v -- -report-type html -o report.html #輸出HTML,oclint使用xml
6. SonarQube Plugin for Objective C
  • Sonarqube market有收費plugin可供安裝炬转,but辆苔,感受一下:


    image.png
  • 選用開源https://github.com/Backelite/sonar-objective-c(還在保持更新的),不過可能存在一些坑扼劈,需要自填驻啤。筆者fork了一下,更新了一下rule:Hotacool/sonar-objective-c荐吵。下面以Backelite為例:
    • github download sonar-objective-c骑冗,unzip
    • Java代碼,需要maven來編譯jar包先煎,安裝maven:
    brew install maven
    
    • sonar-objective-c 目錄(pom.xml所在目錄)編譯:
    mvn package
    
    • /sonar-objective-c-plugin/target 目錄下輸出backelite-sonar-objective-c-plugin-0.6.2.jar
    • Copy jar包到sonarqube安裝目錄下的/extensions/plugins文件夾
    • 修改project的sonar-project.properties(參照sonar-objective-c-plugin的/sample/sonar-project.properties)
    sonar.objectivec.oclint.report=oclint.xml
    sonar.objectivec.project=myApp.xcodeproj
    sonar.objectivec.appScheme=myApp
    sonar.objectivec.excludedPathsFromCoverage=.*Tests.*
    
    • 重啟sonarqube server & 重新運行sonar-scanner
    • 在server上可看到objectivec代碼被檢查贼涩,bingo~
    • 可能存在問題:
      • ERROR: The rule 'OCLint:compiler warning' does not exist.
      • 原因是開源的sonar-objective-c plugin沒有包含這條rule,而oclint檢出了這個問題薯蝎。幾種解決方案:
        • oclint.xml 去掉相關(guān)報錯
        • 修改sonar-objective-c plugin遥倦,添加rule并打包—推薦
          • 實際上,rule文件被存放在/sonar-objective-c-plugin/src/main/resources/org/sonar/plugins/oclint文件夾下占锯,包含兩個文件:profile-oclint.xml 和 rules.txt
          • 參照其他rule袒哥,添加compiler warning即可
          • 重新打jar包缩筛、替換、重啟server 堡称、 sonar-scanner...

參考鏈接:

  1. iOS 測試 iOS 靜態(tài)代碼掃描平臺 Sonarqube 實戰(zhàn) Objective-C歪脏、Swift
  2. jenkins和sonar環(huán)境配置MAC版
  3. ERROR: The rule 'OCLint:compiler warning' does not exist.
  4. Objective C靜態(tài)代碼掃描和代碼質(zhì)量管理 OClint + SonarQube
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市粮呢,隨后出現(xiàn)的幾起案子婿失,更是在濱河造成了極大的恐慌,老刑警劉巖啄寡,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件豪硅,死亡現(xiàn)場離奇詭異,居然都是意外死亡挺物,警方通過查閱死者的電腦和手機懒浮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來识藤,“玉大人硕噩,你說我怎么就攤上這事”牛” “怎么了巨朦?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長赶撰。 經(jīng)常有香客問我舌镶,道長,這世上最難降的妖魔是什么豪娜? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任餐胀,我火速辦了婚禮,結(jié)果婚禮上瘤载,老公的妹妹穿的比我還像新娘否灾。我一直安慰自己,他們只是感情好鸣奔,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布墨技。 她就那樣靜靜地躺著,像睡著了一般溃蔫。 火紅的嫁衣襯著肌膚如雪健提。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天伟叛,我揣著相機與錄音私痹,去河邊找鬼。 笑死,一個胖子當著我的面吹牛紊遵,可吹牛的內(nèi)容都是我干的账千。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼暗膜,長吁一口氣:“原來是場噩夢啊……” “哼匀奏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起学搜,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤娃善,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瑞佩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體聚磺,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年炬丸,在試婚紗的時候發(fā)現(xiàn)自己被綠了瘫寝。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡稠炬,死狀恐怖焕阿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情首启,我是刑警寧澤暮屡,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站闽坡,受9級特大地震影響栽惶,放射性物質(zhì)發(fā)生泄漏愁溜。R本人自食惡果不足惜疾嗅,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望冕象。 院中可真熱鬧代承,春花似錦、人聲如沸渐扮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽墓律。三九已至膀估,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間耻讽,已是汗流浹背察纯。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人饼记。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓香伴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親具则。 傳聞我的和親對象是個殘疾皇子即纲,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 官方資料:SonarQubeSonarSource Jira 一、準備工作: 需要Ruby環(huán)境博肋,如果不會安裝低斋,請參...
    vincentgemini閱讀 2,376評論 3 7
  • 一、前言 年初的時候部門各組都給出了自己的規(guī)范文檔匪凡,包括部門工作規(guī)范拔稳、各語言開發(fā)規(guī)范、測試規(guī)范锹雏、數(shù)據(jù)庫規(guī)范巴比、安全規(guī)...
    dancingking閱讀 15,136評論 8 20
  • 1.SonarQube Sonar的功能:是一個用于代碼質(zhì)量管理的開源平臺,用于管理源代碼的質(zhì)量礁遵,可以從七個維度檢...
    Broom閱讀 9,411評論 0 6
  • 我時常享受一種狀態(tài)轻绞,渴望黃昏下的美景,天邊的晚霞佣耐,夕陽西下的余暉政勃,馬路上樹的斜影,耳邊有風的撫摸兼砖,一朵飄零的雪花親...
    Nan瑾瑜閱讀 319評論 7 4
  • 1 早晨起床時奸远,發(fā)現(xiàn)我的睡眠狀態(tài)非常好,精力在很好地恢復讽挟,看來昨天做的粥懒叛,很對癥,感恩耽梅! 2 下班回家薛窥,在小區(qū)里...
    LiHongxi閱讀 150評論 0 0