iOS Sonar 集成

1.Sonar介紹

?Sonar 是一個(gè)用于代碼質(zhì)量管理的開(kāi)放平臺(tái)。通過(guò)插件機(jī)制,Sonar 可以集成不同的測(cè)試工具,代碼分析工具,以及持續(xù)集成工具。

與持續(xù)集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是簡(jiǎn)單地把不同的代碼檢查工具結(jié)果(例如 FindBugs,PMD 等)直接顯示在 Web 頁(yè)面上,而是通過(guò)不同的插件對(duì)這些結(jié)果進(jìn)行再加工處理,通過(guò)量化的方式度量代碼質(zhì)量的變化,從而可以方便地對(duì)不同規(guī)模和種類(lèi)的工程進(jìn)行代碼質(zhì)量管理。

?在對(duì)其他工具的支持方面,Sonar 不僅提供了對(duì) IDE 的支持,可以在 Eclipse 和 IntelliJ IDEA 這些工具里聯(lián)機(jī)查看結(jié)果;同時(shí) Sonar 還對(duì)大量的持續(xù)集成工具提供了接口支持,可以很方便地在持續(xù)集成中使用 Sonar。

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

覆蓋率:?jiǎn)卧獪y(cè)試覆蓋率;

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

在Sonar工具中配置檢測(cè)工具(規(guī)則), 然后sonar根據(jù)規(guī)則檢測(cè)"質(zhì)量報(bào)告文件", 得出問(wèn)題數(shù)目。 比如本文配置的規(guī)則是OCLint。每個(gè)規(guī)則都有對(duì)應(yīng)的處理時(shí)間, 最后:問(wèn)題類(lèi)型1數(shù)目 * 對(duì)應(yīng)時(shí)間 + 問(wèn)題類(lèi)型2數(shù)目 * 對(duì)應(yīng)時(shí)間 +... 得到時(shí)間。

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

2.Sonar環(huán)境配置

由于安卓的小伙伴率先試用了得以sonar服務(wù)器搭建步驟忽略。剩下的配置sonar環(huán)境,我是在Jenkins的slave機(jī)器上做實(shí)驗(yàn)的。需要使用的工具OCLint、Gcovr、jenkins等等。主要是通過(guò)jenkins定時(shí)觸發(fā) + 配置任務(wù)來(lái)實(shí)現(xiàn)。Jenkins可以通過(guò)協(xié)同很多別的工具工作, 本文就是通過(guò).sh(腳本)來(lái)協(xié)同SVN/Git 與 各個(gè)工具, 來(lái)生成文件并傳給Sonar服務(wù)器。此處相關(guān)的配置不做介紹,主要記錄一下使用過(guò)程中遇到的部分小坑。

SonarQube Scanner下載安裝

配置jenkins腳本

sonar默認(rèn)沒(méi)有安裝oc的插件,需要手動(dòng)下載:sonar-objective-c-plugin-0.5.0-SNAPSHOT.jar下載地址

在項(xiàng)目與*.xocdeproj同級(jí)目錄下新建文本sonar-project.properties配置待測(cè)試項(xiàng)目信息。引用地址

此外?Sonar Xcode8兼容需要特別注意

執(zhí)行過(guò)程中遇到sonar-runner: command not問(wèn)題,需要檢查一下你Mac的環(huán)境變量配置。需要把? sonar-runner? 這個(gè)執(zhí)行文件的路徑,? 配在環(huán)境變量里了。引用地址

PATH=/usr/local/etc/sonar-runner-2.4/bin:$PATH在? ? .bash_profile? ? 文件里加了一行? ? =后面是? sonnar-runner可執(zhí)行文件的路徑,在? ? .bash_profile? ? 文件里加了下面這一行PATH=/usr/local/etc/sonar-runner-2.4/bin:$PATH,=后面是? sonnar-runner可執(zhí)行文件的路徑。

sonar-runner已經(jīng)被scanner代替了。

這里的路徑只是寫(xiě) 類(lèi)文件所在的文件夾的名字,如不管用可以填上全路徑也可以。

遇到此類(lèi)錯(cuò)誤在配置項(xiàng)里注釋掉上述三項(xiàng)就好了。

compile_commands.json文件一定要有東西的。

執(zhí)行jenkins的時(shí)候有沒(méi)有遇到FATAL: SonarQube Scanner executable was not found for SonarQube Scanner 2.8錯(cuò)誤時(shí),下載最新的Scanner找到對(duì)應(yīng)目錄替換即可。

參考文章:

1、iOS Sonar集成流程詳解

2、基于Sonar的iOS代碼質(zhì)量檢測(cè)系統(tǒng)

3、IOS測(cè)試之sonar檢查ios代碼質(zhì)量

4、[實(shí)踐]Sonar Xcode8兼容

5、IOS-Sonar代碼質(zhì)量監(jiān)控

也可以加QQ群交流:323276186

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容