使用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 xctool

  • install 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

原文链接

干货好文,请关注扫描以下二维码:
图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522348.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工作流实战_15_flowable 我发起的流程实例查询

项目地址https://gitee.com/lwj/flowable.git代码分支flowable-base视频讲解地址https://space.bilibili.com/485524575/channel/detail?cid94579 用户名密码0000001test0000002test0000003test0000004test文章目录1. 演示![在这里插入图片描述](https://img-blog.csdnimg.cn…

Istio 庖丁解牛六:多集群网格应用场景

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 钟华来源 | ServiceMesher随着容器技术的流行&#xff0c;大量互联网公司和传统 IT 企业都在尝试应用容器化和服务上云。容器化是一个持续的过程&#xff0c;伴随着多地域部署、安全等级隔离、多云和混合云等复杂的场景需求。…

NAT网关之SNAT进阶使用(一)SNAT POOL

摘要&#xff1a; NAT网关是云上VPC ECS访问Internet的出入口。SNAT可实现指定的VPC ECS使用指定的公网IP访问互联网。阿里云NAT网关控制台创建SNAT条目时&#xff0c;默认是为指定的交换机配置1个公网IP地址。 &#xff08;一&#xff09;前言 为什么使用SNAT POOL NAT网关是云…

工作流实战_16_flowable 办理任务

项目地址https://gitee.com/lwj/flowable.git代码分支flowable-base视频讲解地址https://space.bilibili.com/485524575/channel/detail?cid94579 用户名密码0000001test0000002test0000003test0000004test文章目录1. 演示2. 代码分享1. 演示 2. 代码分享 public ReturnVo&l…

OpenStack精华问答 | OpenStack的网络类型有哪些?

戳蓝字“CSDN云计算”关注我们哦&#xff01;关于OpenStack的探讨几乎从未间断&#xff0c;从2010年10月份一个版本正式发布至今&#xff0c;OpenStack在8年发展历程中&#xff0c;成为了最有争议的那一个。今天&#xff0c;我们就来看看有关于OpenStack的精华问答吧1Q&#xf…

秘籍分享:SLB实例克隆

摘要&#xff1a; 秘籍分享&#xff1a;SLB实例的备份与克隆 1. Greetings :) Hi&#xff0c;大家好&#xff0c;2018年春节刚过不久&#xff0c;想必大家一定觉得假期短暂&#xff0c;没有玩爽吧&#xff0c;但我们IT民工的命就是这么苦逼&#xff0c;想想也只能撸起袖子使劲干…

工作流实战_08_flowable 流程实例的启动

项目地址https://gitee.com/lwj/flowable.git代码分支flowable-base视频讲解地址https://space.bilibili.com/485524575/channel/detail?cid94579 用户名密码0000001test0000002test0000003test0000004test文章目录1. 演示1. 演示 ### 2. 代码 public ReturnVo<ProcessI…

SD-WAN新价值:中企通信与Fortinet强强联合 安全先行

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 刘丹当前&#xff0c;云计算、大数据、人工智能等数字技术方兴未艾&#xff0c;全球正快速进入数字经济时代&#xff0c;企业数字化转型的浪潮已经到来。与此同时&#xff0c;企业数字化转型也带动了一系列技术与应用&#x…

人工智能开发人员需要具备技能

摘要&#xff1a; 对于那些想要从事人工智能项目的开发人员来说&#xff0c;他们需要具备哪些必要的技能&#xff1f;对于那些想要从事人工智能项目的开发人员来说&#xff0c;他们需要具备哪些必要的技能&#xff1f;我们就这个问题采访了22位相关企业的高管&#xff0c;以下就…

rubymine 保存成unix格式_如何免费在线试用 200+ Linux 和 Unix 发行版?

☞ 程序员进阶架构师必备资源免费送 ☜Linux 和 Unix 都有着各种各样的发行版&#xff0c;有的界面美观&#xff0c;有的功能强大。如果你想要尝试不同的 Linux 和 Unix 发行版&#xff0c;传统的作法是先在本地安装对应版本&#xff0c;再进行体验。这样效率非常低下&#xff…

WPF使用prism框架进行页面跳转

首先下载prism.dryloc框架 创建两个文件夹&#xff0c;Views和ViewModels文件夹&#xff0c;在Views里面创建的是页面&#xff0c;在Viewmodels里面创建的是对 应的类&#xff0c;文件不能创建错误 在App.xaml.cs中将App修改成PrismApplication&#xff0c;创建App的CreateShe…

每个产品经理都应该知道的机器学习术语

摘要&#xff1a; 公司正在上马AI项目&#xff1f;想要熟悉机器学习的世界&#xff0c;想要了解所有关于机器学习的术语&#xff0c;看看本文吧&#xff01;公司正在上马AI项目&#xff1f;或许你已经熟悉了机器学习的世界&#xff0c;但是仍然希望扩展你的知识面&#xff0c;并…

工作流实战_22_flowable 驳回/回退 并行网关驳回 多实例驳回 子流程驳回

项目地址https://gitee.com/lwj/flowable.git代码分支flowable-base视频讲解地址https://www.bilibili.com/video/av78779999/ 用户名密码0000001test0000002test0000003test0000004test文章目录1. 场景2. 演示3. 代码分享3.1. 获取可驳回节点3.2. 驳回代码分享1. 场景 驳回&…

真相了!AI 程序员:我们根本没有 80w 年薪好么?

去年大家曾热议一篇文章《已毕业年薪就80万&#xff0c;没出校门就抢光&#xff0c;AI人才真这么值钱&#xff1f;》&#xff0c;大多数业内人士都表示&#xff0c;其实这是幸存者偏差&#xff0c;有人拿到80万&#xff0c;但不是全部。笔者综合了BOSS招聘、拉勾网、猎聘、领英…

ECS控制台实例搜索的优化与改进

摘要&#xff1a; 搜索功能是控制台非常重要的功能&#xff0c;承载着实例管理入口的作用&#xff0c;应该好用&#xff0c;快速和准确。然而&#xff0c;ECS控制台实例列表的搜索功能经常被吐槽不好用&#xff0c;痛点主要有以下三点&#xff1a; 每次搜索之前需要选择搜索类型…

Wpf中的sqlite数据库的连接和迁移

首先你需要安装如图的三个第三方包&#xff0c;创建APi项目并且将此项目设置为启动项第二步&#xff0c;在你的APi项目里面创建context文件夹&#xff0c;在此文件夹下创建你所需要的类&#xff08;数据库的表&#xff09;&#xff0c;在类中创建字段&#xff08;数据库中的字段…

python request url 转义_Python爬虫入门笔记

来源&#xff1a;blog.csdn.net/weixin_44864260爬虫四大步骤&#xff1a;1.获取页面源代码2.获取标签3.正则表达式匹配4.保存数据1. 获取页面源代码5个小步骤:1.伪装成浏览器2.进一步包装请求3.网页请求获取数据4.解析并保存5.返回数据代码&#xff1a;import urllib.request,…

ECS TAG功能详解

摘要&#xff1a; Tag&#xff08;标签&#xff09;&#xff0c;阿里云提供的一种标记资源的方式&#xff0c;对资源添加标签可以方便地对资源进行标记&#xff0c;从而方便的进行资源的批量管理&#xff0c;现在ECS可以使用Tag标记的资源主要有以下几种&#xff1a;实例、磁盘…

日本三大移动通信运营商已重启华为手机销售;高通与LG和解 签署新的5年期专利授权协议; Facebook加密货币Libra被审查...

戳蓝字“CSDN云计算”关注我们哦&#xff01;嗨&#xff0c;大家好&#xff0c;重磅君带来的【云重磅】特别栏目&#xff0c;如期而至&#xff0c;每周五第一时间为大家带来重磅新闻。把握技术风向标&#xff0c;了解行业应用与实践&#xff0c;就交给我重磅君吧&#xff01;重…

工作流实战_21_flowable 加签 任务向前加签 向后加签

项目地址https://gitee.com/lwj/flowable.git代码分支flowable-base视频讲解地址https://www.bilibili.com/video/av78471660/ 用户名密码0000001test0000002test0000003test0000004test文章目录1. 场景分析2. 演示&#xff1a;3. 代码分享3.1. 加签的方法3.2. 审批环节处理1.…