objectivec mysql_使用Jenkins+Sonarqueb进行自动化测试和代码质量检测

原标题:使用Jenkins+Sonarqueb进行自动化测试和代码质量检测

简介

Jenkins

Jenkins是一款开源的持续集成工具,它的特点:易于安装、易于配置、可扩展(自己开发插件),并且它拥有数以百计的成熟插件,这种插件式的特点提供可做任何事情的可能。

Sonarqube

SonarQube 是一个用于代码质量管理的开源平台。通过插件形式,可以支持包括 java, Objective-C, Swift, C#, C/C++, PL/SQL,Java 等等二十几种编程语言的代码质量管理与检测。

7aaff60f470474b843cc155fe8361e60.png

SonarQueb主要从以下7个维度检测评估代码质量:

1. 糟糕的复杂度分布

527cf96a11609ca5c036690e519d1134.png

2. 重复

5feb6f6f57633599df072f8200405d37.png

3. 缺乏单元测试

603aa42c473c9210113e5bff9c47fc5b.png

4. 没有代码标准

5618022a7ae9f9f11051abeb4ecd21b5.png

5. 没有足够的或者过多的注释

6db2f0740ad790135a46cc7cfc116748.png

6. 潜在的bug

d9f3cdf7d3df8cb27983efc89bb4d865.png

7. 糟糕的设计(原文Spaghetti Design,意大利面式设计)

6da1d04bebf3a80af60c0d66c5e8ad15.png

0703d0ffc6d41ae6fc5b6fb6fca16cb0.png

安装

jenkins

brew install jenkins

按提示安装java 1.8

brew services jenkins start or jenkins –httpPort=9002

安装相关插件

48f8d47b613f3a6445eb4b86007f8e28.png

注意事项

gitlab plugin 1.5.3有问题,需要降级到1.5.1

卸妆1.5.3,然后通过上传1.5.1的gitlab-plugin.hpi文件的方式安装

jenkins默认使用8080端口,默认端口跟gitlab ci配置web hook会导致失败,建议换个端口尝试:

c50226ad6db7dafafa5d55e11cd9b576.png

Sonarqube

下载

从http://downloads.sonarsource.com/sonarqube/下载sonarqube,下载后解压到相应地址,比如/opt

配置环境变量

配置SONAR_HOME环境变量,如上一步中的/opt/sonarqube

mysql建库

sonarqube需要将扫描结果保存到数据库中,所以需要创建数据库表格。sonarqube支持SQL Server、Mysql、Oracle、PostgreSQL,此处以MySql为例。

如果尚未安装mysql,可以通过Homebrew进行安装,安装完成后,创建对应的账号和数据库:

7d27733aad3a62c32ffc87570a9ef7c0.png

通过以上指令创建了一个sonar用户,同时创建了一个名为sonar的数据库。

修改/opt/sonarqube/conf/sonar.properties文件,将相关属性按如下设置:

4b99d26f0fb428f2885a17e26084259e.png

start sonarqube

a7ab16c221c1c30f6443ca5314b72ca6.png

download sonar scanner

https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner

objective-c plugin

github: https://github.com/Backelite/sonar-objective-c

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

8a729c9f3e88480b6d7ac7e263ba87b5.png

git clone https://github.com/Backelite/xcpretty.git

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/formulaebrew install oclint

install gcovr

brew install gcovr

install slather

gem install slather

e42f0031e85404cb7add891374d5a6d6.png

sudo gem update --system

5f2bffe7b8c8b0a67c74b9405694ba91.png

sudo gem install /usr/local/bin slather

install lizard

sudo pip install lizard

632c84a052a485285acb9466aff8eb45.png

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连接

767a7d77dc162b95322b5b969d98bb74.png

在Gitlab host url处设置gitlab的url,然后在creadential处点击add。

创建一个Gitlab API token,然后在API token处填入gitlab上的token:

f1d2e6148fbeb384c28eadca555cb09a.png

805ed3733dc3cccf46793af1c70bdccd.png

创建工程

构建一个自由风格的软件项目,然后在源码管理处,选择git,然后进行如下配置:

f7abde3eb46056f59c693cc02354a7f6.png

在Repository URL处填入对应工程的URL,注意,因为后续工程check是通过ssh方式接入的,所以填写的URL一定是ssh URL:

d112139c1026bda8fd03e620b2a6843e.png

然后在Branch Specifier处填入要关注的分支。

然后在Credentials处点击add,配置ssh秘钥:

bdc72b5955870ba0de3a21d657b8a68b.png

选择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相关信息:

0c90734d3f00269a60b5c257102518ec.png

其中Server authentication token可在SonarQube网站,个人账号管理下的security处进行生成:

5d71b49fe260358c7ccddf11dfddb8b8.png

增加SonarScanner构建步骤

点击jenkins里出现的示例工程名 –> Configure –> Build (Add build step),

增加一个Execute shell构建步骤:

ee0e3764a59998abc8d13b1a15d934dd.png

3c06083c247864c69c937ddb37362a76.png

c2f07ef3fce1574bc556666fe30d0dbb.png

2ab7ce8261a075f6533bc39e33132596.png

Build工程并显示生成的数据

eecd581b72fdddc41d222cd283edf371.png

a1f07e29071ce0a451548c862e828aa6.png

报告生成流程分析

Bugs、Velnerabilities、Code Smells

对于Objective-C语言,是通过oclint静态扫描工程代码来生成相关数据。

d3d1917adf205e26d54dbed3dbfdf21e.png

单元测试

利用xcodebuild命令运行虚拟机进行单元测试,然后把输出结果数据生成报告。

6bc5f9cb7e9e5235c60f63094b1a0c42.png

覆盖率

利用slather工具生成数据报告。

8a27bc9fd96d63d1fd756de2fdd57b79.png

功能探讨

目前针对objective-c语言,利用上面提到的objective-c插件,只支持1个Bug和186个Code Smells,Bug和Vulnerability支持的不够。

由于SonarQube并不是完全开源,对于objective-c,它有商业版的插件,如果想要把Bug、Vulnerability支持的好的话,就必须得自定义相关规则,并提供SonarQube支持。

因此研究了一下如何自定义规则并得到SonarQube支持,步骤如下:

修改oclint源码,添加自定义规则

修改sonar-objectivec插件源码,添加自定义规则

构建代码工程,检测自定义规则,生成显示数据

oclint添加自定义规则

下载oclint源码,地址:https://github.com/oclint/oclint

进入代码主目录,利用脚手架脚本生成自定义规则模版文件:

8daf92791cd3ffcd29e9d53bcbe6516d.png

对生成的TestRule.cpp文件进行编辑,实现自定义规则逻辑。

最后编译整个工程:

7f34728ef151dde201d5dab784ac48d0.png

用生成的oclint程序对测试代码进行测试:

69e771470c06b82b23b724d311b00497.png

sonar-objectivec插件支持自定义规则

SonarQube服务端程序利用插件识别规则,并写入数据库,所以插件代码也需要进行修改。

下载插件源码,地址:https://github.com/Backelite/sonar-objective-c.git

需要修改如下3个文件:

src/main/resources/com/sonar/sqale/oclint-model.xmlsrc/main/resources/org/sonar/plugins/oclint/profile-oclint.xmlsrc/main/resources/org/sonar/plugins/oclint/rules.txt

然后编译插件:

9feb6f6874c038ccf683f6b77dd9607d.png

最后把生成的.jar插件拷贝到SonarQube服务端程序的extensions/plugins目录下,再重启SonarQube服务。

73fb66dc0686b0a96bc9a4d148dddabc.png

reference

https://github.com/Backelite/sonar-objective-c

https://mp.weixin.qq.com/s/xi7pZmMMVZZlBNee-Md-Ig

https://www.jianshu.com/p/74bee59fef1c

http://blog.csdn.net/hdwhappy/article/details/61924772

http://blog.csdn.net/hdwhappy/article/details/78486564返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值