jenkins+sonar+ios 基于object C(object-c-plugin-snapshot免费版)搭建
目錄
1、簡(jiǎn)單介紹原理
2、sonar環(huán)境配置
3、sonar-runner環(huán)境配置
4、集成執(zhí)行生成可視化報(bào)表
1、介紹原理
開題提過,我之前的oclint是通過jenkins 調(diào)度執(zhí)行在我們配置的幾臺(tái)mac slave上的,oclint生成的報(bào)告是pmd格式,通過jenkins的插件Pbulish PMD analysis results解析和展示。
但是當(dāng)開發(fā)想看哪些issue的時(shí)候,就會(huì)很麻煩,不是很直觀,需要點(diǎn)擊到j(luò)enkins的job里面去查找。為了方便開發(fā)小伙伴,查閱資料知道了sonar。
網(wǎng)上對(duì)sonar有非常詳細(xì)的介紹,我就不贅述,我理解的sonar就是類似于我用flask寫的一個(gè)服務(wù)端,可以用來存儲(chǔ)數(shù)據(jù)和展示數(shù)據(jù),sonar-runner就類似于requests的一個(gè)post請(qǐng)求,它將oclint檢查生成的PMD格式的XML文件發(fā)送給sonar,然后sonar將接收的數(shù)據(jù)存入
mysql或者其他類型的數(shù)據(jù)庫(kù),并且展示。
對(duì)于jenkins觸發(fā)的job我是通過jenkins 中g(shù)errit的觸發(fā)機(jī)制,當(dāng)開發(fā)change-merge到開發(fā)分支的時(shí)候觸發(fā)job執(zhí)行。
2、sonar環(huán)境配置
sonar環(huán)境配置分兩步,sonar和mysql.
【1】sonar
在這里我在mac和linux環(huán)境都嘗試搭建了sonar。
sonar下載地址為:https://www.sonarqube.org/downloads/
下載好之后,是一個(gè).tgz壓縮文件,解壓之后,這里linux和mac配置環(huán)境是一致的沒有什么不同,放在任意文件夾位置都可以。加入放在/opt/sonar/下面。
啟動(dòng)sonar服務(wù)命令為:
## linux啟動(dòng) ./bin/linux-x86-4/sonar.sh start## mac啟動(dòng) ./bin/macosx-universal-64/sonar.sh start 啟動(dòng)之前,我更改了conf/sonar.properties,由于我在linux上啟動(dòng)了幾個(gè)flask服務(wù)已經(jīng)占用了很多端口。
我更改了這些項(xiàng)目:
然后分別執(zhí)行啟動(dòng)命令,打開http://127.0.0.1:9007,就可以正常進(jìn)入sonar界面。但是在最下面有紅字提示那是因?yàn)闆]有連接數(shù)據(jù)庫(kù)。
這里我更改sonar.search.port是因?yàn)?我發(fā)現(xiàn)默認(rèn)端口9001已經(jīng)被占用,服務(wù)啟動(dòng)不起來,報(bào)錯(cuò)提示在logs/ce.log看出來的。
【2】mysql
這里mac和linux有稍微的區(qū)別。
安裝命令:
mysql安裝好之后,啟動(dòng)命令:
## linux sudo /etc/init.d/mysql start## mac mysql.server start 通過默認(rèn)root用戶登錄mysql,mysql -uroot -proot,登錄之后。
需要新增sonar database以及sonar用戶。
成功之后,重啟一下mysql服務(wù)。
更改conf/sonar.properties數(shù)據(jù)庫(kù)的配置,讓它生效。
sonar.jdbc.username=sonar sonar.jdbc.password=sonarsonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance再重啟一下sonar服務(wù),然后重新登錄http://127.0.0.1:9007,正常啟動(dòng),則可以看到頁(yè)面最底端的紅字預(yù)警提示已經(jīng)沒有了,其實(shí)也可以通過logs文件夾下,日志查看。
小貼士,這里我為什么強(qiáng)調(diào)使用mysql 5.7的版本,是因?yàn)槲以趌inux下安裝第一次是用sudo apt-get install mysql-server,導(dǎo)致安裝的5.5的版本,和sonar 6.2不匹配。
3、sonar-runner配置
sonar-runner類似于一個(gè)發(fā)請(qǐng)求的命令,它應(yīng)該放置于執(zhí)行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
解壓縮之后,環(huán)境變量可配置可不配置,我建議不要配置bash_profile,因?yàn)橐沟胋ash_profile生效,jenkins需要跟slave斷開一下再重連,才能生效。這對(duì)于持續(xù)集成集群服務(wù)來說,是不合理的。
要使得sonar-runner能有效使用,需要配置sonar-runner/conf/sonar-runner.properties
sonar.host.url=http://localhost:9007 sonar.sourceEncoding=UTF-8 sonar.login=admin sonar.password=admin這個(gè)時(shí)候需要在命令行驗(yàn)證一下,假設(shè)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已經(jīng)配置好。
4、集成執(zhí)行生成可視化報(bào)表
【1】在執(zhí)行sonar-runner之前,需要在服務(wù)端sonar/extensions/plugins/下加載一個(gè)oc檢查jar包插件。
sonar-objective-c-plugin-0.5.0-SNAPSHOT.jar插件下載地址:https://github.com/ChenTF/iOS-sonarShell
下載好之后,將其轉(zhuǎn)存到sonar/extensions/plugins/,并重啟一下sonar服務(wù)。
【2】需要新建生成或者在下載的包里面,將sonar-project.properties放入iOS項(xiàng)目主目錄,最后我的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萬事俱備,只欠東風(fēng)。
【3】我已經(jīng)在iOS項(xiàng)目目錄下生成了oclint執(zhí)行之后的PMD格式的lint.xml。
為了驗(yàn)證sonar搭建的沒有問題,直接cd到項(xiàng)目根目錄下去執(zhí)行sonar-runner將lint.xml結(jié)果信息發(fā)送到sonar服務(wù)。
假如前面都正常配置的話,此時(shí)執(zhí)行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看看項(xiàng)目執(zhí)行的記錄有沒有正確上傳了。
我沒有加入自己定義的規(guī)則,那才是靜態(tài)代碼監(jiān)控平臺(tái)最重要的地方,等我實(shí)踐好,再分享吧,我現(xiàn)在只是把環(huán)境配置好了。
寫的不好的地方,請(qǐng)大家多指正。
總結(jié)
以上是生活随笔為你收集整理的jenkins+sonar+ios 基于object C(object-c-plugin-snapshot免费版)搭建的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网页UI视觉设计规范
- 下一篇: XCTool介绍