jenkins+sonar+ios 基于object C(object-c-plugin-snapshot免费版)搭建
目錄
1、簡單介紹原理
2、sonar環境配置
3、sonar-runner環境配置
4、集成執行生成可視化報表
1、介紹原理
開題提過,我之前的oclint是通過jenkins 調度執行在我們配置的幾臺mac slave上的,oclint生成的報告是pmd格式,通過jenkins的插件Pbulish PMD analysis results解析和展示。
但是當開發想看哪些issue的時候,就會很麻煩,不是很直觀,需要點擊到jenkins的job里面去查找。為了方便開發小伙伴,查閱資料知道了sonar。
網上對sonar有非常詳細的介紹,我就不贅述,我理解的sonar就是類似于我用flask寫的一個服務端,可以用來存儲數據和展示數據,sonar-runner就類似于requests的一個post請求,它將oclint檢查生成的PMD格式的XML文件發送給sonar,然后sonar將接收的數據存入
mysql或者其他類型的數據庫,并且展示。
對于jenkins觸發的job我是通過jenkins 中gerrit的觸發機制,當開發change-merge到開發分支的時候觸發job執行。
2、sonar環境配置
sonar環境配置分兩步,sonar和mysql.
【1】sonar
在這里我在mac和linux環境都嘗試搭建了sonar。
sonar下載地址為:https://www.sonarqube.org/downloads/
下載好之后,是一個.tgz壓縮文件,解壓之后,這里linux和mac配置環境是一致的沒有什么不同,放在任意文件夾位置都可以。加入放在/opt/sonar/下面。
啟動sonar服務命令為:
## linux啟動 ./bin/linux-x86-4/sonar.sh start## mac啟動 ./bin/macosx-universal-64/sonar.sh start 啟動之前,我更改了conf/sonar.properties,由于我在linux上啟動了幾個flask服務已經占用了很多端口。
我更改了這些項目:
然后分別執行啟動命令,打開http://127.0.0.1:9007,就可以正常進入sonar界面。但是在最下面有紅字提示那是因為沒有連接數據庫。
這里我更改sonar.search.port是因為,我發現默認端口9001已經被占用,服務啟動不起來,報錯提示在logs/ce.log看出來的。
【2】mysql
這里mac和linux有稍微的區別。
安裝命令:
mysql安裝好之后,啟動命令:
## linux sudo /etc/init.d/mysql start## mac mysql.server start 通過默認root用戶登錄mysql,mysql -uroot -proot,登錄之后。
需要新增sonar database以及sonar用戶。
成功之后,重啟一下mysql服務。
更改conf/sonar.properties數據庫的配置,讓它生效。
sonar.jdbc.username=sonar sonar.jdbc.password=sonarsonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance再重啟一下sonar服務,然后重新登錄http://127.0.0.1:9007,正常啟動,則可以看到頁面最底端的紅字預警提示已經沒有了,其實也可以通過logs文件夾下,日志查看。
小貼士,這里我為什么強調使用mysql 5.7的版本,是因為我在linux下安裝第一次是用sudo apt-get install mysql-server,導致安裝的5.5的版本,和sonar 6.2不匹配。
3、sonar-runner配置
sonar-runner類似于一個發請求的命令,它應該放置于執行oclint的mac slave上。
sonar-runner下載路徑:http://repo1.maven.org/maven2/org/codehaus/sonar/runner/sonar-runner-dist/2.4/sonar-runner-dist-2.4.zip
解壓縮之后,環境變量可配置可不配置,我建議不要配置bash_profile,因為要使得bash_profile生效,jenkins需要跟slave斷開一下再重連,才能生效。這對于持續集成集群服務來說,是不合理的。
要使得sonar-runner能有效使用,需要配置sonar-runner/conf/sonar-runner.properties
sonar.host.url=http://localhost:9007 sonar.sourceEncoding=UTF-8 sonar.login=admin sonar.password=admin這個時候需要在命令行驗證一下,假設sonar-runner放置于opt下,opt/sonar-runner/bin/sonar-runner,提示:
SonarQube Runner 2.4 Java 1.8.0_111 Oracle Corporation (64-bit) Mac OS X 10.12.3 x86_64 INFO: Runner configuration file: /Users/huami/opt/sonar-runner/conf/sonar-runner.properties INFO: Project configuration file: NONE INFO: Default locale: "zh_CN", source code encoding: "UTF-8"說明sonar-runner已經配置好。
4、集成執行生成可視化報表
【1】在執行sonar-runner之前,需要在服務端sonar/extensions/plugins/下加載一個oc檢查jar包插件。
sonar-objective-c-plugin-0.5.0-SNAPSHOT.jar插件下載地址:https://github.com/ChenTF/iOS-sonarShell
下載好之后,將其轉存到sonar/extensions/plugins/,并重啟一下sonar服務。
【2】需要新建生成或者在下載的包里面,將sonar-project.properties放入iOS項目主目錄,最后我的sonar-project.properties為:
########################## # Required configuration # ##########################sonar.projectKey=MiFit sonar.projectName=MiFit sonar.projectVersion=1.0 sonar.language=objectivec# Project description sonar.projectDescription=Fake description# Path to source directories 工程文件目錄 sonar.sources=MiFit# Xcode project configuration (.xcodeproj or .xcworkspace) # -> If you have a project: configure only sonar.objectivec.project # -> If you have a workspace: configure sonar.objectivec.workspace and sonar.objectivec.project # and use the later to specify which project(s) to include in the analysis (comma separated list) sonar.objectivec.project=MiFit.xcodeproj sonar.objectivec.workspace=MiFit.xcworkspace# Scheme to build your application sonar.objectivec.appScheme=MiFit # Scheme to build and run your tests (comment following line of you don't have any tests)########################## # Optional configuration # ########################### Encoding of the source code sonar.sourceEncoding=UTF-8sonar.objectivec.oclint.reportPath=lint.xmlsonar.scm.enabled=falsesonar.host.url=http://x.x.x.x:9007萬事俱備,只欠東風。
【3】我已經在iOS項目目錄下生成了oclint執行之后的PMD格式的lint.xml。
為了驗證sonar搭建的沒有問題,直接cd到項目根目錄下去執行sonar-runner將lint.xml結果信息發送到sonar服務。
假如前面都正常配置的話,此時執行sonar-runner,log如果是這樣的
Analysis report uploaded in 2489ms 11:47:24.701 INFO - ANALYSIS SUCCESSFUL, you can browse http://x.x.x.x:9007/dashboard/index/MiFit 11:47:24.702 INFO - Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report 11:47:24.702 INFO - More about the report processing at http://x.x.x.x:9007/api/ce/task?id=AVrK7MT-YTb445TpRSn7 11:47:25.577 INFO - Task total time: 24.425 s INFO: ------------------------------------------------------------------------ INFO: EXECUTION SUCCESS INFO: ------------------------------------------------------------------------ Total time: 32.521s Final Memory: 23M/777M可以去http://192.168.1.101:9007看看項目執行的記錄有沒有正確上傳了。
我沒有加入自己定義的規則,那才是靜態代碼監控平臺最重要的地方,等我實踐好,再分享吧,我現在只是把環境配置好了。
寫的不好的地方,請大家多指正。
總結
以上是生活随笔為你收集整理的jenkins+sonar+ios 基于object C(object-c-plugin-snapshot免费版)搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网页UI视觉设计规范
- 下一篇: XCTool介绍