天天看點

使用Jenkins+Sonarqueb進行自動化測試和代碼品質檢測簡介安裝示範一個示例代碼工程的例子報告生成流程分析功能探讨reference

Jenkins是一款開源的持續內建工具,它的特點:易于安裝、易于配置、可擴充(自己開發插件),并且它擁有數以百計的成熟插件,這種插件式的特點提供可做任何事情的可能。

SonarQube 是一個用于代碼品質管理的開源平台。通過插件形式,可以支援包括 java, Objective-C, Swift, C#, C/C++, PL/SQL,JavaScript 等等二十幾種程式設計語言的代碼品質管理與檢測。

使用Jenkins+Sonarqueb進行自動化測試和代碼品質檢測簡介安裝示範一個示例代碼工程的例子報告生成流程分析功能探讨reference

SonarQueb主要從以下7個次元檢測評估代碼品質:

糟糕的複雜度分布

重複

缺乏單元測試

沒有代碼标準

沒有足夠的或者過多的注釋

潛在的bug

糟糕的設計(原文Spaghetti Design,意大利面式設計)

使用Jenkins+Sonarqueb進行自動化測試和代碼品質檢測簡介安裝示範一個示例代碼工程的例子報告生成流程分析功能探讨reference

brew install jenkins

按提示安裝java 1.8

brew services jenkins start or jenkins –httpPort=9002

安裝相關插件

gitlab plugin 1.5.3有問題,需要降級到1.5.1

卸妝1.5.3,然後通過上傳1.5.1的gitlab-plugin.hpi檔案的方式安裝

jenkins預設使用8080端口,預設端口跟gitlab ci配置web hook會導緻失敗,建議換個端口嘗試:

配置SONAR_HOME環境變量,如上一步中的/opt/sonarqube

sonarqube需要将掃描結果儲存到資料庫中,是以需要建立資料庫表格。sonarqube支援

SQL Server、Mysql、Oracle、PostgreSQL,此處以MySql為例。

如果尚未安裝mysql,可以通過Homebrew進行安裝,安裝完成後,建立對應的賬号和數

據庫:

通過以上指令建立了一個sonar使用者,同時建立了一個名為sonar的資料庫。

修改/opt/sonarqube/conf/sonar.properties檔案,将相關屬性按如下設定:

<a href="https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner">https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner</a>

clone後進入主目錄, 執行腳本:./build-and-deploy.sh

把編譯生成的backelite-sonar-objective-c-plugin-0.6.2.jar檔案拷貝到/opt/sonarqube/extensions/plugins目錄。

最後重新開機Sonarqube

Prerequisites

Installation of xcpretty with JUnit reports fix

cd xcpretty

git checkout fix/duration_of_failed_tests_workaround

gem build xcpretty.gemspec

sudo gem install --both xcpretty-0.2.2.gem

install xctool

brew install xctool

install oclint

brew tap oclint/formulae

brew install oclint

install gcovr

brew install gcovr

install slather

gem install slather

sudo gem update --system

sudo gem install /usr/local/bin slather

install lizard

sudo pip install lizard

chmod +x get-pip.py

sudo python get-pip.py

下載下傳上面sonar-objective-c github工程sample目錄下的sonar-project.properties檔案,拷貝到示例代碼工程目錄,按照對應的設定進行修改

拷貝該檔案到代碼工程目錄

使用Jenkins+Sonarqueb進行自動化測試和代碼品質檢測簡介安裝示範一個示例代碼工程的例子報告生成流程分析功能探讨reference

在Gitlab host url處設定gitlab的url,然後在creadential處點選add。

建立一個Gitlab API token,然後在API token處填入gitlab上的token:

使用Jenkins+Sonarqueb進行自動化測試和代碼品質檢測簡介安裝示範一個示例代碼工程的例子報告生成流程分析功能探讨reference
使用Jenkins+Sonarqueb進行自動化測試和代碼品質檢測簡介安裝示範一個示例代碼工程的例子報告生成流程分析功能探讨reference

建構一個自由風格的軟體項目,然後在源碼管理處,選擇git,然後進行如下配置:

使用Jenkins+Sonarqueb進行自動化測試和代碼品質檢測簡介安裝示範一個示例代碼工程的例子報告生成流程分析功能探讨reference

在Repository URL處填入對應工程的URL,注意,因為後續工程check是通過ssh方式接入的,是以填寫的URL一定是ssh URL:

使用Jenkins+Sonarqueb進行自動化測試和代碼品質檢測簡介安裝示範一個示例代碼工程的例子報告生成流程分析功能探讨reference

然後在Branch Specifier處填入要關注的分支。

然後在Credentials處點選add,配置ssh秘鑰:

使用Jenkins+Sonarqueb進行自動化測試和代碼品質檢測簡介安裝示範一個示例代碼工程的例子報告生成流程分析功能探讨reference

選擇SSH Username with private key,然後在username處填入gitlab賬号,然後private key可以選擇Enter directly,直接輸入秘鑰,将~/.ssh/id_rsa檔案中的内容直接拷貝即可。注意,此處必須保證該私鑰對應的公鑰(即 id_rsa.pub)必須配置在gitlab上,否則會失敗, 配置完成後點選Add。

然後在Credentials處選擇剛才建立的credential即可,如果配置成功不會有報錯資訊,否則會有相關的錯誤資訊。

其他的配置可以根據實際情況進行配置,配置完成後點選儲存即建立完成。

在管理jenkins-&gt;全局配置頁面下,找到SonarQube servers,配置sonarqube server相關資訊:

使用Jenkins+Sonarqueb進行自動化測試和代碼品質檢測簡介安裝示範一個示例代碼工程的例子報告生成流程分析功能探讨reference

其中Server authentication token可在SonarQube網站,個人賬号管理下的security處進行生成:

使用Jenkins+Sonarqueb進行自動化測試和代碼品質檢測簡介安裝示範一個示例代碼工程的例子報告生成流程分析功能探讨reference

點選jenkins裡出現的示例工程名 –&gt; Configure –&gt; Build (Add build step),

增加一個Execute shell建構步驟:

使用Jenkins+Sonarqueb進行自動化測試和代碼品質檢測簡介安裝示範一個示例代碼工程的例子報告生成流程分析功能探讨reference
使用Jenkins+Sonarqueb進行自動化測試和代碼品質檢測簡介安裝示範一個示例代碼工程的例子報告生成流程分析功能探讨reference
使用Jenkins+Sonarqueb進行自動化測試和代碼品質檢測簡介安裝示範一個示例代碼工程的例子報告生成流程分析功能探讨reference

Command内容為:

使用Jenkins+Sonarqueb進行自動化測試和代碼品質檢測簡介安裝示範一個示例代碼工程的例子報告生成流程分析功能探讨reference
使用Jenkins+Sonarqueb進行自動化測試和代碼品質檢測簡介安裝示範一個示例代碼工程的例子報告生成流程分析功能探讨reference

對于Objective-C語言,是通過oclint靜态掃描工程代碼來生成相關資料。

使用Jenkins+Sonarqueb進行自動化測試和代碼品質檢測簡介安裝示範一個示例代碼工程的例子報告生成流程分析功能探讨reference

利用xcodebuild指令運作虛拟機進行單元測試,然後把輸出結果資料生成報告。

使用Jenkins+Sonarqueb進行自動化測試和代碼品質檢測簡介安裝示範一個示例代碼工程的例子報告生成流程分析功能探讨reference

利用slather工具生成資料報告。

使用Jenkins+Sonarqueb進行自動化測試和代碼品質檢測簡介安裝示範一個示例代碼工程的例子報告生成流程分析功能探讨reference

目前針對objective-c語言,利用上面提到的objective-c插件,隻支援1個Bug和186個Code Smells,Bug和Vulnerability支援的不夠。

由于SonarQube并不是完全開源,對于objective-c,它有商業版的插件,如果想要把Bug、Vulnerability支援的好的話,就必須得自定義相關規則,并提供SonarQube支援。

是以研究了一下如何自定義規則并得到SonarQube支援,步驟如下:

修改oclint源碼,添加自定義規則

修改sonar-objectivec插件源碼,添加自定義規則

建構代碼工程,檢測自定義規則,生成顯示資料

進入代碼主目錄,利用腳手架腳本生成自定義規則模版檔案:

對生成的TestRule.cpp檔案進行編輯,實作自定義規則邏輯。

最後編譯整個工程:

用生成的oclint程式對測試代碼進行測試:

SonarQube服務端程式利用插件識别規則,并寫入資料庫,是以插件代碼也需要進行修改。

需要修改如下3個檔案:

src/main/resources/com/sonar/sqale/oclint-model.xml

src/main/resources/org/sonar/plugins/oclint/profile-oclint.xml

src/main/resources/org/sonar/plugins/oclint/rules.txt

然後編譯插件:

最後把生成的.jar插件拷貝到SonarQube服務端程式的extensions/plugins目錄下,再重新開機SonarQube服務。

使用Jenkins+Sonarqueb進行自動化測試和代碼品質檢測簡介安裝示範一個示例代碼工程的例子報告生成流程分析功能探讨reference

<a href="https://github.com/Backelite/sonar-objective-c">https://github.com/Backelite/sonar-objective-c</a>

<a href="https://mp.weixin.qq.com/s/xi7pZmMMVZZlBNee-Md-Ig">https://mp.weixin.qq.com/s/xi7pZmMMVZZlBNee-Md-Ig</a>

<a href="https://www.jianshu.com/p/74bee59fef1c">https://www.jianshu.com/p/74bee59fef1c</a>

<a href="http://blog.csdn.net/hdwhappy/article/details/61924772">http://blog.csdn.net/hdwhappy/article/details/61924772</a>

<a href="http://blog.csdn.net/hdwhappy/article/details/78486564">http://blog.csdn.net/hdwhappy/article/details/78486564</a>