使用Jenkins+Sonarqueb进行自动化测试和代码质量检测
摘要: Jenkins Jenkins是一款开源的持续集成工具,它的特点:易于安装、易于配置、可扩展(自己开发插件),并且它拥有数以百计的成熟插件,这种插件式的特点提供可做任何事情的可能。
简介
Jenkins
Jenkins是一款开源的持续集成工具,它的特点:易于安装、易于配置、可扩展(自己开发插件),并且它拥有数以百计的成熟插件,这种插件式的特点提供可做任何事情的可能。
Sonarqube
SonarQube 是一个用于代码质量管理的开源平台。通过插件形式,可以支持包括 java, Objective-C, Swift, C#, C/C++, PL/SQL,JavaScript 等等二十几种编程语言的代码质量管理与检测。
SonarQueb主要从以下7个维度检测评估代码质量:
1.糟糕的复杂度分布
文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们,
且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试
2.重复
显然程序中包含大量复制粘贴的代码是质量低下的
sonar可以展示源码中重复严重的地方
3.缺乏单元测试
sonar可以很方便地统计并展示单元测试覆盖率及测试结果统计
4.没有代码标准
sonar可以通过oclint,PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写
5.没有足够的或者过多的注释
没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降
而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷
6.潜在的bug
sonar可以通过oclint,PMD,CheckStyle,Findbugs等等代码规则检测工具检测出潜在的bug
7.糟糕的设计(原文Spaghetti Design,意大利面式设计)
通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系
可以检测自定义的架构规则
通过sonar可以管理第三方的jar包
可以利用LCOM4检测单个任务规则的应用情况
检测耦合
安装
jenkins
1.brew install jenkins
2.按提示安装java 1.8
3.brew services jenkins start or jenkins –httpPort=9002
4.安装相关插件
Folders Plugin
Build timeout plugin
Workspace Cleanup Plugin
Ant Plugin
Gradle Plugin
Pipeline
Github Organization Folders Plugin
Pipeline Stage View Plugin
Git Plugin
Subversion Plug-in
SSH Slaves plugin
LDAP Plugin
Email Extension Plugin
Gitlab Plugin
注意事项
gitlab plugin 1.5.3有问题,需要降级到1.5.1
卸妆1.5.3,然后通过上传1.5.1的gitlab-plugin.hpi文件的方式安装
jenkins默认使用8080端口,默认端口跟gitlab ci配置web hook会导致失败,建议换个端口尝试:
jenkins —-httpPort=9002
Sonarqube
下载
从http://downloads.sonarsource.com/sonarqube/下载sonarqube,下载后解压到相应地址,比如/opt
配置环境变量
配置SONAR_HOME环境变量,如上一步中的/opt/sonarqube
mysql建库
sonarqube需要将扫描结果保存到数据库中,所以需要创建数据库表格。sonarqube支持
SQL Server、Mysql、Oracle、PostgreSQL,此处以MySql为例。
如果尚未安装mysql,可以通过Homebrew进行安装,安装完成后,创建对应的账号和数
据库:
CREATE USER 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT all privileges ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
flush privileges;
create database sonar;
通过以上指令创建了一个sonar用户,同时创建了一个名为sonar的数据库。
修改/opt/sonarqube/conf/sonar.properties文件,将相关属性按如下设置:
sonar.web.host=0.0.0.0
sonar.web.port=9000
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
#sonar.web.context=/your_prefix //非必须,若需要在访问sonarqube服务时加上统一的前缀则配置此项
start sonarqube
/opt/sonarqube/bin/macosx-universal-64/sonar.sh start
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
1.Prerequisites
Installation of xcpretty with JUnit reports fix
xcpretty需要安装fixed version,才能配合Sonarqube工作。
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 xctoolinstall oclint
brew tap oclint/formulae
brew install oclint- install gcovr
brew install gcovr - install slather
gem install slather
如果报错:no implicit conversion of nil into string
sudo gem update –system
如果提示:no write permissions
sudo gem install /usr/local/bin slather
- install lizard
sudo pip install lizard
如果没有安装pip,下载<https: bootstrap.pypa.io="" get-pip.py="">
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连接
在Gitlab host url处设置gitlab的url,然后在creadential处点击add。
创建一个Gitlab API token,然后在API token处填入gitlab上的token:
创建工程
构建一个自由风格的软件项目,然后在源码管理处,选择git,然后进行如下配置:
在Repository URL处填入对应工程的URL,注意,因为后续工程check是通过ssh方式接入的,所以填写的URL一定是ssh URL:
然后在Branch Specifier处填入要关注的分支。
然后在Credentials处点击add,配置ssh秘钥:
选择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相关信息:
其中Server authentication token可在SonarQube网站,个人账号管理下的security处进行生成:
增加SonarScanner构建步骤
点击jenkins里出现的示例工程名 –> Configure –> Build (Add build step),
增加一个Execute shell构建步骤:
Command内容为:
用户目录/.bashrc # 加载需要的环境变量
./run-sonar.sh -v # 生成数据并传递给SonarQube Server
Build工程并显示生成的数据
报告生成流程分析
Bugs、Velnerabilities、Code Smells
对于Objective-C语言,是通过oclint静态扫描工程代码来生成相关数据。
单元测试
利用xcodebuild命令运行虚拟机进行单元测试,然后把输出结果数据生成报告。
覆盖率
利用slather工具生成数据报告。
功能探讨
目前针对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
进入代码主目录,利用脚手架脚本生成自定义规则模版文件:
oclint-scripts/scaffoldRule TestRule -t ASTVisitor
对生成的TestRule.cpp文件进行编辑,实现自定义规则逻辑。
最后编译整个工程:
cd oclint-scripts
./make
用生成的oclint程序对测试代码进行测试:
./build/oclint-release/bin/oclint -report-type pmd -o test.xml 测试代码目录/测试文件.m
sonar-objectivec插件支持自定义规则
SonarQube服务端程序利用插件识别规则,并写入数据库,所以插件代码也需要进行修改。
下载插件源码,地址:https://github.com/Backelite/sonar-objective-c.git
需要修改如下3个文件:
1.src/main/resources/com/sonar/sqale/oclint-model.xml
2.src/main/resources/org/sonar/plugins/oclint/profile-oclint.xml
3.src/main/resources/org/sonar/plugins/oclint/rules.txt
然后编译插件:
./build-and-deploy.sh
最后把生成的.jar插件拷贝到SonarQube服务端程序的extensions/plugins目录下,再重启SonarQube服务。
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
原文链接
干货好文,请关注扫描以下二维码:
使用Jenkins+Sonarqueb进行自动化测试和代码质量检测相关推荐
- 代码质量检测-SonarQube
文章目录 前言 一.SonarQube是什么? 二.SonarQube安装步骤 1.docker安装 2.docker-compose安装 3. 访问SonarQube 4. 配置SonarQube ...
- 代码质量检测平台架构设计
「前言」 你是否清楚的了解自己的项目有多少个文件夹.多少个文件.多少行代码.多少个函数.多少个字符数? 你是否在项目中引入过代码质量检测相关的工具? 你是否在不同项目的切换中饱受indent=2还是i ...
- 代码质量检测(jacoco pmd pipeline)
代码质量检测 一.静态代码分析 静态代码分析是指在不运行程序的前提下,对源代码进行分析或检查,范围包括代码风格.可能出现的空指针.代码块大小.重复的代码等. pipeline中,静态代码分析通常被安排 ...
- 皕杰报表之小程序代码质量检测
最近在被云开发免费的份额,由于一些原因把小程序开发工具升级到了最新版本,新版本上传需要代码质量检测. 一.主包 其中按照官方说明需要提前知道的可优化项: 1. 代码包不包含插件大小超过 1.5 M [ ...
- Gitlab集成阿里巴巴P3C-PMD代码质量检测插件
1. 获取P3C-PMD (1) 下载源码 源码地址:https://github.com/alibaba/p3c p3c-pmd-2.1.1-jar.zip: https://pan.baidu.c ...
- java检测工具_常用Java代码质量检测评估工具
常用Java代码质量检测评估工具 1. PMD from http://pmd.sourceforge.net/ PMD能够扫描Java 源代码,查找类似以下的潜在问题: 可能的bug--try/ca ...
- 【IDEA】代码质量检测工具 QAPLug
[IDEA]代码质量检测工具 QAPLug 代码质量检测工具 情景: 写完代码一定要别人review才发现bug或不好的语法或多余的变量是一件多么尴尬的事情,如果想在写代码时或者写代码后自己能发现问题 ...
- python代码检测工具及区别_flake8-python代码质量检测工具
flake8是python代码质量检测工具. 描述 flake8是一个命令行实用程序,用于在整个Python项目中加强样式的一致性. 默认情况下,它包括PyFlakes项目提供的lint检查,PyCo ...
- Docker运行sonarqube (代码质量检测平台)
onarqube是什么 SonarQube是用于持续检查代码质量的开源平台. 可用于持续集成,持续部署流程中的代码检测环节. idea和jenkins都提供了插件配合使用. liunx推荐配置环境 l ...
最新文章
- oracle 11g RAC Grid Infrastructure
- 网络营销外包——网络营销外包专员如何帮助企业挑选网站建设类型
- 第一周周四DailyReporting——PM(李忠)
- c语言容斥原理,容斥原理 | 易学教程
- html中basefont标签,HTML的basefont标签
- java 线程 spring_java中spring里实现多线程
- Android中用文件初始化sqlite 数据库(二)
- SQL SERVER CHAR ( integer_expression )各版本返回值差异的案例
- [转]linux常用命令学习总结(超详细)
- AC日记——潜伏者 洛谷 P1071 (模拟)
- 【Python】python帮助文档
- 最适合人工智能的编程语言:JAVA人工智能程序编程
- Tempo数据分析平台,助力企业高效完成数据预处理工作
- 总结安卓应用市场App首发活动规则
- bilibili弹幕爬取
- 使用Qt进行音视频播放
- 帕克西AR一键换发型,让你秒变潮人!
- provide和inject的用法
- 【基于UDP的网络聊天室】
- 原子操作Atomic类
热门文章
- 家装强电弱电布线图_家装水电施工标准(图文版),装修小白一眼也能看懂。...
- LeetCode笔记】剑指 Offer 35. 复杂链表的复制(Java、哈希表、原地算法)
- word公式编辑器_【Word技巧】word使用终极技巧,工程人必会(四)
- linux 帮助文档管理,Linux系统帮助文件使用——man命令
- c语言链表集合求并集用字母表示,c语言实现的链表集合的并集与交集
- android实现自动横竖屏切换,android 中实现横竖屏切换【原创】
- oracle捕捉所有异常,如何捕获和处理特定的Oracle异常?
- 你会接受同门师兄的追求吗?
- 100个数学家如何集体越狱??
- 数学家与诗人,都是这个世界上先知先觉的预言家