[實踐]iOS Sonar集成流程詳解

全部文章目錄:http://my.oschina.net/ChenTF/blog/677112html

本篇文章地址:  http://my.oschina.net/ChenTF/blog/708646java

對您有幫助的話, 還請"贊" 一下哦, 有問題可留言或加QQ羣:323276186ios

關於XCode8的兼容方案, 請看個人這篇文章:https://my.oschina.net/ChenTF/blog/806565git

 

1. Sonar介紹

     行業內提到"代碼質量管理, 自動化質量管理", 通常指的都是經過Sonar來實現。本文的目標是實如今Sonar上顯示出iOS項目, 先看張最終的效果圖:github

     用Sonar可以實現什麼?objective-c

  • 技術債務(sonar根據"規則"掃描出不符合規則的代碼)
  • 覆蓋率(單元測試覆蓋率)
  • 重複(重複的代碼, 有利於提醒封裝)
  • 結構

 

問題1: "規則"指的是什麼? xcode

     在Sonar工具中配置檢測工具(規則), 而後sonar根據規則檢測"質量報告文件", 得出問題數目。 好比本文配置的規則是OCLintbash

 

問題2: 技術債務的天數怎麼得出?服務器

     每一個規則都有對應的處理時間, 最後:問題類型1數目 * 對應時間 + 問題類型2數目 * 對應時間 +... 獲得時間。運維

 

2. 概述

    Sonar原生並不支持iOS, 因此就須要咱們本身按照Sonar原理來安裝各個工具, 並將各個工具鏈接起來, 生成質量結果, 並由Jenkins來實現自動化執行。

    但因爲涉及到的知識範圍很廣, 不只須要iOS開發技術, 還須要運維知識和各個命令工具的使用方法。 並且國內外的資料少的至關可憐, 沒有最佳實踐, 沒有專門的第三方平臺, 形成不少東西都是一步步試錯出來的, 一步一坎, 因此用了很長時間。

     不過最後都將每一個工具, 每一個步驟打通, 將各個工具鏈接起來, 整理成.sh腳本 和 .properties配置文件, 這樣在後續新添項目時會很輕鬆。

 

3. 宏觀介紹

3.1 配置關係圖

 

3.2 涉及到的知識點

  • XCTool工具
  • OClint工具
  • Gcovr工具
  • Git, SVN命令
  • Linux命令
  • Jenkins工具
  • Sonar工具
  • Shell語法
  • Sonar-runner工具

 

3.3 關係邏輯講解

  1. 每一個項目添加一個配置文件(.properties), 爲了在Jenkins上調用命令時能自動填充項目設置;
  2. 在Jenkins上安裝各個工具(XCTool, OCLint, gcovr, sonar-runner) 與 .sh腳本, Jenkins服務器能夠從代碼倉庫clone下代碼, 而後經過.sh腳本與.properties配置文件來調用各個「工具」, 而後每一個項目生成對應的「文件」;
  3. 在 .sh腳本 最後會經過sonar-runner將生成的 」文件」 傳給Sonar服務器, Sonar服務器以圖形化的形式顯示出對應的結果。
  4. 具體傳遞給哪一個sonar服務器與項目名, 都是在.properties中進行配置

 

4.環境配置

4.1 基礎知識

     其實Sonar的展現是將一系列的報告文件轉換獲得的, 文件又是經過各個工具生成的, 因此須要先安裝工具。

     涉及到的工具包括(1.xctool 2.oclint, 3.gcovr, 4.sonar-runner), 雖然涉及的工具比較多, 每一個用法均可詳細的單獨講, 但不建議在開始時就深刻了解這些, 本文會將用到的地方進行講解, 後續深刻了解請看給出的推薦資料。

 

     在接下來的步驟中, 須要具有基礎的Linuxl知識與Shell知識, 建議有空的話先學學。

     Linux教程: http://c.biancheng.net/cpp/html/2726.html

     Shell教程: http://c.biancheng.net/cpp/view/6994.html

 

4.2 工具-HomeBrew

    「gem管理器」, 經過該工具能夠安裝別的gem工具, 相似cocoapods。

     安裝方法: http://brew.sh/index_zh-cn.html

     詳細介紹: https://github.com/Homebrew/brew/blob/master/share/doc/homebrew/README.md#readme

 

     有了此工具後, 如下的工具均可經過該工具來安裝, 正確的使用方式是先search 工具, 再install工具    

 

4.3 工具-XCTool

     此工具是用來代替XCode在服務器上執行Build, Test等命令, 相似xcodebuild。

     安裝方法:$brew install xctool

     詳細介紹: https://github.com/facebook/xctool

 

4.4  工具-OCLint

     OCLint是一個靜態分析工具, 能夠檢測OC代碼, 發現語法漏洞。用該工具來生成代碼質量報告(技術債務)。

     安裝方式:

     $ brew install Caskroom/cask/oclint

     或

     $ brew tap oclint/formulae

     $ brew install oclint  (不走上面的命令直接install oclint的話, 下載的版本不是最新版, 文檔將不能正常生成)

 

4.5 工具-Gcovr

     該工具是用來生成單元測試覆蓋率的文檔的

     安裝方式: $brew install gcovr

 

4.6 環境-JDK

     教程: http://jingyan.baidu.com/article/ce09321b7c111f2bff858fea.html

 

5.Jenkins

     Jenkins通常被稱爲"構建器", 說簡單點就是 "定時觸發 + 配置任務"。Jenkins能夠經過協同不少別的工具工做, 本文就是經過.sh(腳本)來協同SVN/Git 與 各個工具, 來生成文件並傳給Sonar服務器。

 

     更多Jenkins的知識具體看這兩篇教程。

     http://www.cnblogs.com/zz0412/p/jenkins02.html

     http://www.cnblogs.com/horizonli/p/5330073.html

 

5.1 新建一個工程

 

5.2 代碼倉庫設置

5.2.1 SVN

關於credential:

          Jenkins檢測到當前服務器訪問不了代碼倉庫時, 會提示你設置權限, 進入Credential, 設置帳號密碼就能夠了。

 

5.2.2 Git方式

 

git的Credentials設置:

設置好username與private key(能訪問git電腦的私鑰)就能夠了, Passphrase會自動生成。

 

關於公鑰私鑰的介紹:

     通常的SSH方式是在git服務器的SSH設置裏面添加本身當前電腦的公鑰(id_rsa.pub)。而後當前電腦訪問Git服務器時就能直接訪問了。

     但Jenkins須要在Git上設置好當前電腦的私鑰後, 還須要將當前電腦的私鑰(id_rsa)保存在Jenkins配置中。猜想是訪問git時是以別的電腦來訪問的。

 

附:

Git教程 :http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

 

5.3 構建設置

     Jenkins支持經過腳本構建, 通常再次設置一些環境與變量, 而後執行腳本。通常此處的設置要結合具體的腳本調用方式來決定, 因此再第六節再詳細介紹。

我當前的設置是這樣的:

  1. 先設置環境變量
  2. 跳轉到工程根目錄下
  3. 把腳本copy到當前目錄下
  4. 執行腳本

 

5.4 定時構建

     能夠指定天天幾點執行一次, 或每週五執行一次, 固然也能夠點擊左上角的"當即構建"當即執行。

 

例: 設置爲週一到週五的9點30~9點45之間進行

 

6.更多說明

6.1 Sonar配置

     本項目的配置指導來源於"https://github.com/octo-technology/sonar-objective-c", 後發現教程中的配置很差用, 最後找到這篇Fork的文章"https://github.com/mjdetullio/sonar-objective-c", 最後是按照第二篇的設置進行的。sonar的配置具體看第二篇文章

     其實我對Sonar的配置不是很清楚, 先留個坑吧。 只知道最後經過runner-sonar工具將生成的文件傳給了Sonar服務器, 至於Sonar的配置參數, 則是從.sonar-project.properties文件裏面獲取的。

    run-sonar.sh在第一個github連接裏面, 在6.4中將.sh修改了, 同窗們請注意; .properties下載第二個連接裏面的。

附:

     Sonar官網: http://www.javatips.net/blog/sonarqube-tutorial

     Sonar安裝: http://www.uml.org.cn/jchgj/201307251.asp

 

6.2 工程配置

     按照教程的指導, 將run-sonar.sh和sonar-project.properties放到根目錄下, 修改.properties文件的內容, 而後執行run-sonar.sh就能夠了。文件下載地址:https://github.com/mjdetullio/sonar-objective-c

     我是將.properties隨項目走, 由於每一個項目的配置不同, 而run-sonar.sh是固定不變的, 因此放在了Jenkins服務器上, 再執行構建時將其拷貝到當前目錄下。

 

介紹些配置過程當中用到的命令, 方便你們:

$ ssh 用戶名@服務器地址     // 經過bash訪問遠程服務器

$ scp /Users/xxx/Documents/svn/run-sonar.sh pmo-mini@111.222.2.444:~/opt/iosShell/run-sonar.sh  // 將本地的sh文件copy到遠程服務器對應的位置

$ chmod u=rxw run-sonar.sh // 修改文件權限, 使其爲可讀可寫可執行

 

6.3 腳本執行流程與生成物介紹

     clear 

       ↓

     build

       ↓

     test        :     TEST-report.xml

       ↓

     gcovr     :     coverage-xxx.xml

       ↓

     oclint     :      oclint.xml

     

     TEST-report.xml 是經過xctool的test命令生成的, 若是生成失敗會有2, 3行的默認文本, 這時就能夠證實是執行到test時失敗了, 建議先用xcode執行測試, 把環境調通了, 更多單元測試文章, 請看個人 "iOS單元測試入門與配置"篇;

     coverage-XiangMu.xml 是單測覆蓋率報告, 若是你的單測覆蓋率有誤, 看這個文檔。走完test後, 在XCode的路徑文件下, 會生成項目的覆蓋率報告, 而後gcovr命令根據這些報告生成覆蓋率報告。 通常覆蓋率報告有問題都是test環節有問題

     oclint.xml 是技術債務報告, 通常build環節沒有問題, 這個報告就沒問題。

 

6.4 腳本分享

    由於github上的腳本執行時到test命令就錯誤了, 因此將我修改後的分享出來。

    沒有找到能上次文件的地方, 把腳本因此內容全貼出來太浪費地方了, 就分享修改的地方吧, 你們從github上下載, 而後修改吧..

else

	echo -n 'Running tests using xctool'	
	# runCommand sonar-reports/TEST-report.xml $xctoolCmdPrefix -scheme "$testScheme" -reporter junit GCC_GENERATE_TEST_COVERAGE_FILES=YES GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES test
	# ctf:這個命令出錯, 用下面的命令代替
	$xctoolCmdPrefix -scheme "$testScheme" -reporter junit:sonar-reports/TEST-report.xml GCC_GENERATE_TEST_COVERAGE_FILES=YES GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES test

	echo -n 'Computing coverage report'

	# We do it for every xcodeproject (in case of workspaces)

 

7.成果

7.1 技術債務

          不只能夠顯示出有多少不符合」規則」的代碼片斷,還能根據代碼倉庫的提交歷史對應到時誰的問題

 

7.2 覆蓋率

    能夠檢測到單元測試的覆蓋範圍,監督單元測試覆蓋範圍。

 

7.3 重複

          檢測到類似的代碼片斷,提醒將經常使用的功能封裝起來,提升重用性。

 

7.4 結構

      項目的文件結構    

 

7.5 代碼

 

7.6 問題

 

8.將來接入方式與成本

  1. 項目中添加.properties配置文件, 修改配置項;
  2. 在Jenkins添加對應的項目;
  3. 而後? 沒有而後了。

 

9.何去何從

      在XCode8以後, XCTool已不支持了, 對這點我用xcodebuild+xcpretty來進行了替換, 具體詳情看個人這篇文章: https://my.oschina.net/ChenTF/blog/806565

相關文章
相關標籤/搜索