iOS Sonar集成流程詳解

所有文章目錄:http://my.oschina.net/ChenTF/blog/677112

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

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

關(guān)于XCode8的兼容方案, 請看我的這篇文章:https://my.oschina.net/ChenTF/blog/80656

1. Sonar介紹

行業(yè)內(nèi)提到"代碼質(zhì)量管理, 自動化質(zhì)量管理", 一般指的都是通過Sonar來實現(xiàn)底扳。本文的目標是實現(xiàn)在Sonar上顯示出iOS項目, 先看張最終的效果圖:

用Sonar能夠?qū)崿F(xiàn)什么?

技術(shù)債務(wù)(sonar根據(jù)"規(guī)則"掃描出不符合規(guī)則的代碼)

覆蓋率(單元測試覆蓋率)

重復(fù)(重復(fù)的代碼, 有利于提醒封裝)

結(jié)構(gòu)

問題1: "規(guī)則"指的是什么?

在Sonar工具中配置檢測工具(規(guī)則), 然后sonar根據(jù)規(guī)則檢測"質(zhì)量報告文件", 得出問題數(shù)目。 比如本文配置的規(guī)則是OCLint

問題2: 技術(shù)債務(wù)的天數(shù)怎么得出?

每個規(guī)則都有對應(yīng)的處理時間, 最后:問題類型1數(shù)目 * 對應(yīng)時間 + 問題類型2數(shù)目 * 對應(yīng)時間 +... 得到時間坠敷。

2. 概述

Sonar原生并不支持iOS, 所以就需要我們自己按照Sonar原理來安裝各個工具, 并將各個工具連接起來, 生成質(zhì)量結(jié)果, 并由Jenkins來實現(xiàn)自動化執(zhí)行乐严。

但由于涉及到的知識范圍很廣, 不僅需要iOS開發(fā)技術(shù), 還需要運維知識和各個命令工具的使用方法。 而且國內(nèi)外的資料少的相當可憐, 沒有最佳實踐, 沒有專門的第三方平臺, 造成很多東西都是一步步試錯出來的, 一步一坎, 所以用了很長時間。

不過最后都將每個工具, 每個步驟打通, 將各個工具連接起來, 整理成.sh腳本?和 .properties配置文件, 這樣在后續(xù)新添項目時會很輕松翼抠。

3. 宏觀介紹

3.1 配置關(guān)系圖

3.2 涉及到的知識點

XCTool工具

OClint工具

Gcovr工具

Git, SVN命令

Linux命令

Jenkins工具

Sonar工具

Shell語法

Sonar-runner工具

3.3 關(guān)系邏輯講解

每個項目添加一個配置文件(.properties), 為了在Jenkins上調(diào)用命令時能自動填充項目設(shè)置;

在Jenkins上安裝各個工具(XCTool, OCLint, gcovr, sonar-runner) 與 .sh腳本, Jenkins服務(wù)器可以從代碼倉庫clone下代碼, 然后通過.sh腳本與.properties配置文件來調(diào)用各個“工具”, 然后每個項目生成對應(yīng)的“文件”;

在 .sh腳本 最后會通過sonar-runner將生成的 ”文件” 傳給Sonar服務(wù)器, Sonar服務(wù)器以圖形化的形式顯示出對應(yīng)的結(jié)果。

具體傳遞給哪個sonar服務(wù)器與項目名, 都是在.properties中進行配置

4.環(huán)境配置

4.1 基礎(chǔ)知識

其實Sonar的展示是將一系列的報告文件轉(zhuǎn)換得到的, 文件又是通過各個工具生成的, 所以需要先安裝工具获讳。

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

在接下來的步驟中, 需要具備基礎(chǔ)的Linuxl知識與Shell知識, 建議有空的話先學(xué)學(xué)。

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在服務(wù)器上執(zhí)行Build, Test等命令, 類似xcodebuild量愧。

安裝方法:$brew install xctool

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

4.4 ?工具-OCLint

OCLint是一個靜態(tài)分析工具, 可以檢測OC代碼, 發(fā)現(xiàn)語法漏洞。用該工具來生成代碼質(zhì)量報告(技術(shù)債務(wù))尤误。

安裝方式:

$?brew install Caskroom/cask/oclint

$?brew tap oclint/formulae

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

4.5 工具-Gcovr

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

安裝方式: $brew install gcovr

4.6 環(huán)境-JDK

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

5.Jenkins

Jenkins一般被稱為"構(gòu)建器", 說簡單點就是 "定時觸發(fā) + 配置任務(wù)"。Jenkins可以通過協(xié)同很多別的工具工作, 本文就是通過.sh(腳本)來協(xié)同SVN/Git 與 各個工具, 來生成文件并傳給Sonar服務(wù)器结缚。

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

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

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

5.1?新建一個工程

5.2 代碼倉庫設(shè)置

5.2.1 SVN

關(guān)于credential:

Jenkins檢測到當前服務(wù)器訪問不了代碼倉庫時, 會提示你設(shè)置權(quán)限, 進入Credential, 設(shè)置賬號密碼就可以了。

5.2.2?Git方式

git的Credentials設(shè)置:

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

關(guān)于公鑰私鑰的介紹:

一般的SSH方式是在git服務(wù)器的SSH設(shè)置里面添加自己當前電腦的公鑰(id_rsa.pub)尤勋。然后當前電腦訪問Git服務(wù)器時就能直接訪問了喘落。

但Jenkins需要在Git上設(shè)置好當前電腦的私鑰后, 還需要將當前電腦的私鑰(id_rsa)保存在Jenkins配置中。猜測是訪問git時是以別的電腦來訪問的最冰。

附:

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

5.3 構(gòu)建設(shè)置

Jenkins支持通過腳本構(gòu)建, 一般再次設(shè)置一些環(huán)境與變量, 然后執(zhí)行腳本瘦棋。一般此處的設(shè)置要結(jié)合具體的腳本調(diào)用方式來決定, 所以再第六節(jié)再詳細介紹。

我當前的設(shè)置是這樣的:

先設(shè)置環(huán)境變量

跳轉(zhuǎn)到工程根目錄下

把腳本copy到當前目錄下

執(zhí)行腳本

5.4 定時構(gòu)建

可以指定每天幾點執(zhí)行一次, 或每周五執(zhí)行一次, 當然也可以點擊左上角的"立即構(gòu)建"立即執(zhí)行暖哨。

例: 設(shè)置為周一到周五的9點30~9點45之間進行

6.更多說明

6.1 Sonar配置

本項目的配置指導(dǎo)來源于"https://github.com/octo-technology/sonar-objective-c", 后發(fā)現(xiàn)教程中的配置不好用, 最后找到這篇Fork的文章"https://github.com/mjdetullio/sonar-objective-c", 最后是按照第二篇的設(shè)置進行的赌朋。sonar的配置具體看第二篇文章

其實我對Sonar的配置不是很清楚, 先留個坑吧。 只知道最后通過runner-sonar工具將生成的文件傳給了Sonar服務(wù)器, 至于Sonar的配置參數(shù), 則是從.sonar-project.properties文件里面獲取的篇裁。

附:

Sonar官網(wǎng):http://www.javatips.net/blog/sonarqube-tutorial

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

6.2 工程配置

按照教程的指導(dǎo), 將run-sonar.sh和sonar-project.properties放到根目錄下, 修改.properties文件的內(nèi)容, 然后執(zhí)行run-sonar.sh就可以了沛慢。

我是將.properties隨項目走, 因為每個項目的配置不一樣, 而run-sonar.sh是固定不變的, 所以放在了Jenkins服務(wù)器上, 再執(zhí)行構(gòu)建時將其拷貝到當前目錄下。

介紹些配置過程中用到的命令, 方便大家:

$ ssh 用戶名@服務(wù)器地址 ? ? // 通過bash訪問遠程服務(wù)器

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

$ chmod u=rxw run-sonar.sh // 修改文件權(quán)限, 使其為可讀可寫可執(zhí)行

6.3 腳本執(zhí)行流程與生成物介紹

clear

build

test ? ? ? ?: ? ? TEST-report.xml

gcovr ? ? : ? ? coverage-xxx.xml

oclint ? ? : ? ? ?oclint.xml

TEST-report.xml 是通過xctool的test命令生成的, 如果生成失敗會有2, 3行的默認文本, 這時就可以證明是執(zhí)行到test時失敗了, 建議先用xcode執(zhí)行測試, 把環(huán)境調(diào)通了, 更多單元測試文章, 請看我的 "iOS單元測試入門與配置"篇;

coverage-XiangMu.xml 是單測覆蓋率報告, 如果你的單測覆蓋率有誤, 看這個文檔达布。走完test后, 在XCode的路徑文件下, 會生成項目的覆蓋率報告, 然后gcovr命令根據(jù)這些報告生成覆蓋率報告团甲。 一般覆蓋率報告有問題都是test環(huán)節(jié)有問題

oclint.xml 是技術(shù)債務(wù)報告, 一般build環(huán)節(jié)沒有問題, 這個報告就沒問題。

6.4 腳本分享

因為github上的腳本執(zhí)行時到test命令就錯誤了, 所以將我修改后的分享出來黍聂。

沒有找到能上次文件的地方, 把腳本所以內(nèi)容全貼出來太浪費地方了, 就分享修改的地方吧, 大家從github上下載, 然后修改吧..

elseecho-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:TEST-report.xml GCC_GENERATE_TEST_COVERAGE_FILES=YES GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES?

testecho-n'Computing coverage report'

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

7.成果

7.1 技術(shù)債務(wù)

不僅可以顯示出有多少不符合”規(guī)則”的代碼片段,還能根據(jù)代碼倉庫的提交歷史對應(yīng)到時誰的問題

7.2 覆蓋率

可以檢測到單元測試的覆蓋范圍,監(jiān)督單元測試覆蓋范圍躺苦。

7.3 重復(fù)

檢測到相似的代碼片段,提醒將常用的功能封裝起來,提高重用性。

7.4 結(jié)構(gòu)

項目的文件結(jié)構(gòu)

7.5 代碼

7.6 問題

8.未來接入方式與成本

項目中添加.properties配置文件, 修改配置項;

在Jenkins添加對應(yīng)的項目;

然后? 沒有然后了产还。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末匹厘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子雕沉,更是在濱河造成了極大的恐慌集乔,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坡椒,死亡現(xiàn)場離奇詭異扰路,居然都是意外死亡,警方通過查閱死者的電腦和手機倔叼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門汗唱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人丈攒,你說我怎么就攤上這事哩罪。” “怎么了巡验?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵际插,是天一觀的道長。 經(jīng)常有香客問我显设,道長框弛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任捕捂,我火速辦了婚禮瑟枫,結(jié)果婚禮上斗搞,老公的妹妹穿的比我還像新娘。我一直安慰自己慷妙,他們只是感情好僻焚,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著膝擂,像睡著了一般虑啤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上猿挚,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天咐旧,我揣著相機與錄音,去河邊找鬼绩蜻。 笑死铣墨,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的办绝。 我是一名探鬼主播伊约,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼孕蝉!你這毒婦竟也來了屡律?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤降淮,失蹤者是張志新(化名)和其女友劉穎超埋,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體佳鳖,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡霍殴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了系吩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片来庭。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖穿挨,靈堂內(nèi)的尸體忽然破棺而出月弛,到底是詐尸還是另有隱情,我是刑警寧澤科盛,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布帽衙,位于F島的核電站,受9級特大地震影響贞绵,放射性物質(zhì)發(fā)生泄漏厉萝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望冀泻。 院中可真熱鬧,春花似錦蜡饵、人聲如沸弹渔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肢专。三九已至,卻和暖如春焦辅,著一層夾襖步出監(jiān)牢的瞬間博杖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工筷登, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留剃根,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓前方,卻偏偏與公主長得像狈醉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子惠险,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

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

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,748評論 6 342
  • iOS 持續(xù)集成 - 開篇 iOS 持續(xù)集成 - 自動化 Code Review [iOS 持續(xù)集成 - 自動化單...
    PPPan閱讀 11,479評論 34 96
  • 前言 眾所周知苗傅,現(xiàn)在App的競爭已經(jīng)到了用戶體驗為王,質(zhì)量為上的白熱化階段班巩。用戶們都是很挑剔的渣慕。如果一個公司的推廣...
    閑云清煙閱讀 2,511評論 1 4
  • 1.Sonar介紹 Sonar 是一個用于代碼質(zhì)量管理的開放平臺。通過插件機制抱慌,Sonar 可以集成不同的測試工具...
    南調(diào)江南閱讀 2,483評論 0 0
  • 優(yōu)彈素——讓我遇到更好的自己 如果說遇見是一種美的邂逅逊桦,那么我與你的相遇必定是生活對我追求美的最大饋贈。在從姐妹手...
    霸王青青閱讀 296評論 0 0