摘要:是一個用于代碼質量管理的開源平臺。支持,此處以為例。注意,此處必須保證該私鑰對應的公鑰即必須配置在上,否則會失敗配置完成后點擊。單元測試利用命令運行虛擬機進行單元測試,然后把輸出結果數據生成報告。
摘要: Jenkins Jenkins是一款開源的持續集成工具,它的特點:易于安裝、易于配置、可擴展(自己開發插件),并且它擁有數以百計的成熟插件,這種插件式的特點提供可做任何事情的可能。
簡介
Jenkins
Jenkins是一款開源的持續集成工具,它的特點:易于安裝、易于配置、可擴展(自己開發插件),并且它擁有數以百計的成熟插件,這種插件式的特點提供可做任何事情的可能。
Sonarqube
SonarQube 是一個用于代碼質量管理的開源平臺。通過插件形式,可以支持包括 java, Objective-C, Swift, C#, C/C++, PL/SQL,JavaScript 等等二十幾種編程語言的代碼質量管理與檢測。
SonarQueb主要從以下7個維度檢測評估代碼質量:
1.糟糕的復雜度分布
文件、類、方法等,如果復雜度過高將難以改變,這會使得開發人員難以理解它們, 且如果沒有自動化的單元測試,對于程序中的任何組件的改變都將可能導致需要全面的回歸測試
2.重復
顯然程序中包含大量復制粘貼的代碼是質量低下的 sonar可以展示源碼中重復嚴重的地方
3.缺乏單元測試
sonar可以很方便地統計并展示單元測試覆蓋率及測試結果統計
4.沒有代碼標準
sonar可以通過oclint,PMD,CheckStyle,Findbugs等等代碼規則檢測工具規范代碼編寫
5.沒有足夠的或者過多的注釋
沒有注釋將使代碼可讀性變差,特別是當不可避免地出現人員變動時,程序的可讀性將大幅下降 而過多的注釋又會使得開發人員將精力過多地花費在閱讀注釋上,亦違背初衷
6.潛在的bug
sonar可以通過oclint,PMD,CheckStyle,Findbugs等等代碼規則檢測工具檢測出潛在的bug
7.糟糕的設計(原文Spaghetti Design,意大利面式設計)
通過sonar可以找出循環,展示包與包、類與類之間的相互依賴關系 可以檢測自定義的架構規則 通過sonar可以管理第三方的jar包 可以利用LCOM4檢測單個任務規則的應用情況 檢測耦合
安裝
jenkins
1.brew install jenkins
2.按提示安裝java 1.8
3.brew services jenkins start or jenkins –httpPort=9002
4.安裝相關插件
Folders Plugin Build timeout plugin Workspace Cleanup Plugin Ant Plugin Gradle Plugin Pipeline Github Organization Folders Plugin Pipeline Stage View Plugin Git Plugin Subversion Plug-in SSH Slaves plugin LDAP Plugin Email Extension Plugin Gitlab Plugin
注意事項
gitlab plugin 1.5.3有問題,需要降級到1.5.1
卸妝1.5.3,然后通過上傳1.5.1的gitlab-plugin.hpi文件的方式安裝
jenkins默認使用8080端口,默認端口跟gitlab ci配置web hook會導致失敗,建議換個端口嘗試:
jenkins —-httpPort=9002
Sonarqube
下載
從http://downloads.sonarsource....,下載后解壓到相應地址,比如/opt
配置環境變量
配置SONAR_HOME環境變量,如上一步中的/opt/sonarqube
mysql建庫
sonarqube需要將掃描結果保存到數據庫中,所以需要創建數據庫表格。sonarqube支持
SQL Server、Mysql、Oracle、PostgreSQL,此處以MySql為例。
如果尚未安裝mysql,可以通過Homebrew進行安裝,安裝完成后,創建對應的賬號和數
據庫:
CREATE USER "sonar"@"%" IDENTIFIED BY "sonar"; GRANT all privileges ON sonar.* TO "sonar"@"%" IDENTIFIED BY "sonar"; flush privileges; create database sonar;
通過以上指令創建了一個sonar用戶,同時創建了一個名為sonar的數據庫。
修改/opt/sonarqube/conf/sonar.properties文件,將相關屬性按如下設置:
sonar.web.host=0.0.0.0 sonar.web.port=9000 sonar.jdbc.username=sonar sonar.jdbc.password=sonar sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false #sonar.web.context=/your_prefix //非必須,若需要在訪問sonarqube服務時加上統一的前綴則配置此項
start sonarqube
/opt/sonarqube/bin/macosx-universal-64/sonar.sh start
download sonar scanner
https://docs.sonarqube.org/di...
objective-c plugin
github: https://github.com/Backelite/...
clone后進入主目錄, 執行腳本:./build-and-deploy.sh
把編譯生成的backelite-sonar-objective-c-plugin-0.6.2.jar文件拷貝到/opt/sonarqube/extensions/plugins目錄。
最后重啟Sonarqube
1.Prerequisites
Installation of xcpretty with JUnit reports fix
xcpretty需要安裝fixed version,才能配合Sonarqube工作。
git clone https://github.com/Backelite/...
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
如果報錯:no implicit conversion of nil into string
sudo gem update --system
如果提示:no write permissions
sudo gem install /usr/local/bin slather
install lizard
sudo pip install lizard
如果沒有安裝pip,下載
chmod +x get-pip.py
sudo python get-pip.py
演示一個示例代碼工程的例子
代碼工程的配置
sonar-project.properties
下載上面sonar-objective-c github工程sample目錄下的sonar-project.properties文件,拷貝到示例代碼工程目錄,按照對應的設置進行修改
run-sonar.sh
拷貝該文件到代碼工程目錄
jenkins配置
在管理jenkins->系統設置->gitlab下配置gitlab連接
在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即可,如果配置成功不會有報錯信息,否則會有相關的錯誤信息。
其他的配置可以根據實際情況進行配置,配置完成后點擊保存即創建完成。
配置SonarQube servers
在管理jenkins->全局配置頁面下,找到SonarQube servers,配置sonarqube server相關信息:
其中Server authentication token可在SonarQube網站,個人賬號管理下的security處進行生成:
增加SonarScanner構建步驟
點擊jenkins里出現的示例工程名 –> Configure –> Build (Add build step),
增加一個Execute shell構建步驟:
Command內容為:
用戶目錄/.bashrc # 加載需要的環境變量 ./run-sonar.sh -v # 生成數據并傳遞給SonarQube Server
Build工程并顯示生成的數據
報告生成流程分析
Bugs、Velnerabilities、Code Smells
對于Objective-C語言,是通過oclint靜態掃描工程代碼來生成相關數據。
單元測試
利用xcodebuild命令運行虛擬機進行單元測試,然后把輸出結果數據生成報告。
覆蓋率
利用slather工具生成數據報告。
功能探討
目前針對objective-c語言,利用上面提到的objective-c插件,只支持1個Bug和186個Code Smells,Bug和Vulnerability支持的不夠。
由于SonarQube并不是完全開源,對于objective-c,它有商業版的插件,如果想要把Bug、Vulnerability支持的好的話,就必須得自定義相關規則,并提供SonarQube支持。
因此研究了一下如何自定義規則并得到SonarQube支持,步驟如下:
1.修改oclint源碼,添加自定義規則
2.修改sonar-objectivec插件源碼,添加自定義規則
3.構建代碼工程,檢測自定義規則,生成顯示數據
oclint添加自定義規則
下載oclint源碼,地址:https://github.com/oclint/oclint
進入代碼主目錄,利用腳手架腳本生成自定義規則模版文件:
oclint-scripts/scaffoldRule TestRule -t ASTVisitor
對生成的TestRule.cpp文件進行編輯,實現自定義規則邏輯。
最后編譯整個工程:
cd oclint-scripts ./make
用生成的oclint程序對測試代碼進行測試:
./build/oclint-release/bin/oclint -report-type pmd -o test.xml 測試代碼目錄/測試文件.m
sonar-objectivec插件支持自定義規則
SonarQube服務端程序利用插件識別規則,并寫入數據庫,所以插件代碼也需要進行修改。
下載插件源碼,地址:https://github.com/Backelite/...
需要修改如下3個文件:
1.src/main/resources/com/sonar/sqale/oclint-model.xml
2.src/main/resources/org/sonar/plugins/oclint/profile-oclint.xml
3.src/main/resources/org/sonar/plugins/oclint/rules.txt
然后編譯插件:
./build-and-deploy.sh
最后把生成的.jar插件拷貝到SonarQube服務端程序的extensions/plugins目錄下,再重啟SonarQube服務。
reference
https://github.com/Backelite/...
https://mp.weixin.qq.com/s/xi...
https://www.jianshu.com/p/74b...
http://blog.csdn.net/hdwhappy...
http://blog.csdn.net/hdwhappy...
原文鏈接
閱讀更多干貨好文,請關注掃描以下二維碼:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/17694.html
摘要:是一個用于代碼質量管理的開源平臺。支持,此處以為例。注意,此處必須保證該私鑰對應的公鑰即必須配置在上,否則會失敗配置完成后點擊。單元測試利用命令運行虛擬機進行單元測試,然后把輸出結果數據生成報告。 摘要: Jenkins Jenkins是一款開源的持續集成工具,它的特點:易于安裝、易于配置、可擴展(自己開發插件),并且它擁有數以百計的成熟插件,這種插件式的特點提供可做任何事情的可能。 ...
摘要:關注的目標就是在代碼提交之后,順利且迅速的把新的功能部署到產品環境上。由于是,那么單元測試,回歸測試,集成測試,都是實現的手段。高質量的產品需求書和高質量的自動化集成測試用例毫無疑問,是高質量軟件的保證之一。 showImg(https://segmentfault.com/img/remote/1460000006877091?w=800&h=600); 什么是Test-Driven...
摘要:來這里看看的工程師如何進行持續集成與持續部署。主要介紹了豆瓣移動持續集成和測試相關實踐,用工具化自動化社會化測試來解決遇到的問題,將打包發布環節自動化。這期的持續集成實踐分享就到這里。 我們常看到許多團隊和開發者分享他們的持續集成實踐經驗,本期 fir.im Weekly 收集了 iOS,Android,PHP ,NodeJS 等項目搭建持續集成的實踐,以及一些國內外公司的內部持續集成...
閱讀 1120·2021-11-25 09:43
閱讀 1569·2021-10-25 09:47
閱讀 2464·2019-08-30 13:46
閱讀 752·2019-08-29 13:45
閱讀 1280·2019-08-26 13:29
閱讀 2989·2019-08-23 15:30
閱讀 1101·2019-08-23 14:17
閱讀 1325·2019-08-23 13:43