Jenkins是一款開源的持續內建工具,它的特點:易于安裝、易于配置、可擴充(自己開發插件),并且它擁有數以百計的成熟插件,這種插件式的特點提供可做任何事情的可能。
SonarQube 是一個用于代碼品質管理的開源平台。通過插件形式,可以支援包括 java, Objective-C, Swift, C#, C/C++, PL/SQL,JavaScript 等等二十幾種程式設計語言的代碼品質管理與檢測。

SonarQueb主要從以下7個次元檢測評估代碼品質:
糟糕的複雜度分布
重複
缺乏單元測試
沒有代碼标準
沒有足夠的或者過多的注釋
潛在的bug
糟糕的設計(原文Spaghetti Design,意大利面式設計)
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檔案,拷貝到示例代碼工程目錄,按照對應的設定進行修改
拷貝該檔案到代碼工程目錄
在Gitlab host url處設定gitlab的url,然後在creadential處點選add。
建立一個Gitlab API token,然後在API token處填入gitlab上的token:
建構一個自由風格的軟體項目,然後在源碼管理處,選擇git,然後進行如下配置:
在Repository URL處填入對應工程的URL,注意,因為後續工程check是通過ssh方式接入的,是以填寫的URL一定是ssh URL:
然後在Branch Specifier處填入要關注的分支。
然後在Credentials處點選add,配置ssh秘鑰:
選擇SSH Username with private key,然後在username處填入gitlab賬号,然後private key可以選擇Enter directly,直接輸入秘鑰,将~/.ssh/id_rsa檔案中的内容直接拷貝即可。注意,此處必須保證該私鑰對應的公鑰(即 id_rsa.pub)必須配置在gitlab上,否則會失敗, 配置完成後點選Add。
然後在Credentials處選擇剛才建立的credential即可,如果配置成功不會有報錯資訊,否則會有相關的錯誤資訊。
其他的配置可以根據實際情況進行配置,配置完成後點選儲存即建立完成。
在管理jenkins->全局配置頁面下,找到SonarQube servers,配置sonarqube server相關資訊:
其中Server authentication token可在SonarQube網站,個人賬号管理下的security處進行生成:
點選jenkins裡出現的示例工程名 –> Configure –> Build (Add build step),
增加一個Execute shell建構步驟:
Command内容為:
對于Objective-C語言,是通過oclint靜态掃描工程代碼來生成相關資料。
利用xcodebuild指令運作虛拟機進行單元測試,然後把輸出結果資料生成報告。
利用slather工具生成資料報告。
目前針對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服務。
<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>