简介

Jenkins

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

Sonarqube

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

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

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

1. 糟糕的复杂度分布

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

2. 重复

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

3. 缺乏单元测试

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

4. 没有代码标准

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

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

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

6. 潜在的bug

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

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

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

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

安装

jenkins

  1. brew install jenkins
  2. 按提示安装java 1.8
  3. brew services jenkins start or jenkins –httpPort=9002
  4. 安装相关插件

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

注意事项

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

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

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

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

Sonarqube

下载

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

配置环境变量

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

mysql建库

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

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

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

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

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

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

start sonarqube

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

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

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

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

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

sudo gem update --system

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

sudo gem install /usr/local/bin slather

install lizard

sudo pip install lizard

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

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

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

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

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

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

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

创建工程

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

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

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

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

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

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

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

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

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

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

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

增加SonarScanner构建步骤

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

增加一个Execute shell构建步骤:

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

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

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

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

Build工程并显示生成的数据

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

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

报告生成流程分析

Bugs、Velnerabilities、Code Smells

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

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

单元测试

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

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

覆盖率

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

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

功能探讨

目前针对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

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

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

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

最后编译整个工程:

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

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

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

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

然后编译插件:

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

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

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

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

原文:https://yq.aliyun.com/articles/541761?spm=a2c41.11181499.0.0

相关文章:

  • 2021-11-16
  • 2021-11-14
  • 2021-05-20
  • 2022-12-23
  • 2021-10-18
  • 2021-10-19
猜你喜欢
  • 2022-12-23
  • 2021-08-17
  • 2022-01-12
  • 2021-12-11
  • 2021-07-16
  • 2021-10-21
相关资源
相似解决方案