jenkins+sonar+ios 基于object C(object-c-plugin-snapshot免费版)搭建
来源:互联网 发布:java高并发解决方案 编辑:程序博客网 时间:2024/06/11 20:52
目录
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服务已经占用了很多端口。
我更改了这些项目:
sonar.web.host=0.0.0.0sonar.web.port=9007sonar.search.port=9011
然后分别执行启动命令,打开http://127.0.0.1:9007
,就可以正常进入sonar界面。但是在最下面有红字提示那是因为没有连接数据库。
这里我更改sonar.search.port是因为,我发现默认端口9001已经被占用,服务启动不起来,报错提示在
logs/ce.log
看出来的。
【2】mysql
这里mac和linux有稍微的区别。
安装命令:
## linux 我推荐rpm格式安装,且安装mysql 5.7版本1、https://dev.mysql.com/downloads/repo/apt/ 下载dev包2、转存linux,然后执行sudo dpkg -i mysql-apt-config_0.8.3-1_all.debgroupadd mysqluseradd -r -g mysql mysqlsudo apt-get install libaio-dev## mac安装mysqlbrew install mysql
mysql安装好之后,启动命令:
## linuxsudo /etc/init.d/mysql start## macmysql.server start
通过默认root用户登录mysql,mysql -uroot -proot
,登录之后。
需要新增sonar database以及sonar用户。
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;CREATE USER 'sonar' IDENTIFIED BY 'sonar';GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';FLUSH PRIVILEGES;
成功之后,重启一下mysql服务。
更改conf/sonar.properties
数据库的配置,让它生效。
sonar.jdbc.username=sonarsonar.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:9007sonar.sourceEncoding=UTF-8sonar.login=admin sonar.password=admin
这个时候需要在命令行验证一下,假设sonar-runner放置于opt
下,opt/sonar-runner/bin/sonar-runner
,提示:
SonarQube Runner 2.4Java 1.8.0_111 Oracle Corporation (64-bit)Mac OS X 10.12.3 x86_64INFO: Runner configuration file: /Users/huami/opt/sonar-runner/conf/sonar-runner.propertiesINFO: Project configuration file: NONEINFO: 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=MiFitsonar.projectName=MiFitsonar.projectVersion=1.0sonar.language=objectivec# Project descriptionsonar.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.xcodeprojsonar.objectivec.workspace=MiFit.xcworkspace# Scheme to build your applicationsonar.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 codesonar.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 2489ms11:47:24.701 INFO - ANALYSIS SUCCESSFUL, you can browse http://x.x.x.x:9007/dashboard/index/MiFit11:47:24.702 INFO - Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report11:47:24.702 INFO - More about the report processing at http://x.x.x.x:9007/api/ce/task?id=AVrK7MT-YTb445TpRSn711:47:25.577 INFO - Task total time: 24.425 sINFO: ------------------------------------------------------------------------INFO: EXECUTION SUCCESSINFO: ------------------------------------------------------------------------Total time: 32.521sFinal Memory: 23M/777M
可以去http://192.168.1.101:9007
看看项目执行的记录有没有正确上传了。
我没有加入自己定义的规则,那才是静态代码监控平台最重要的地方,等我实践好,再分享吧,我现在只是把环境配置好了。
写的不好的地方,请大家多指正。
- jenkins+sonar+ios 基于object C(object-c-plugin-snapshot免费版)搭建
- ios-object c-01
- IOS Object-c relese
- ios object-c errno
- Windows下搭建object-c
- Windows下搭建object-c
- ubuntu搭建object-c环境
- Object-c Associated Object
- iOS object-c 面试题
- iOS object-c 面试题
- IOS Object-c Base64编码
- iOS开发-object-c之 @[], @{}
- IOS开发-object-c之 @[], @{}
- object c ,ios 集合分组
- iOS开发-object-c之 @[], @{}
- iOS指纹识别Object-C语言
- iOS Object-C 基础 UIlabel
- iOS开发-object-c之 @[], @{}
- java中的throw和throws的区别
- 扫码领取支付宝红包
- 【BJOI2014】大融合 LCT维护子树信息
- 离线安装ruby,以及发现版本信息显示不对问题
- Dialog
- jenkins+sonar+ios 基于object C(object-c-plugin-snapshot免费版)搭建
- java线程池Executor,ExecutorService,ThreadPoolExecutor的使用
- 【MD】ubuntu server 16.04离线安装docker 1.12.3的探索
- Run Qt5.6 on VS2015 & “无法迁移项目文件” & "Cannot instantiate QtProjectEngine object"错误的解决方法
- JDK,JRE,JVM区别
- 多线程情况下,主线程先退出,子线程会被强制退出吗
- Qt之QFileDialog另存文件时应该注意的问题
- php 模拟 tail -f
- Gesture手势及手势库