`
猫耳呀
  • 浏览: 167253 次
社区版块
存档分类
最新评论

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

Prerequisites

1.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

2.install xctool
brew install xctool

3.install oclint
brew tap oclint/formulae
brew install oclint

4.install gcovr
brew install gcovr

5.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

6.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文件进行编辑,实现自定义规则逻辑。

最后编译整个工程:l 测试代码目录/测
cd oclint-scripts
./make

用生成的oclint程序对测试代码进行测试:
./build/oclint-release/bin/oclint -report-type pmd -o test.xm试文件.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

原文链接:https://yq.aliyun.com/articles/541761?spm=a2c41.11181499.0.0
分享到:
评论

相关推荐

    Jenkins + Gitee 实现代码自动化构建

    Jenkins + Gitee 实现代码自动化构建 Jenkins + Gitee 实现代码自动化构建 Jenkins + Gitee 实现代码自动化构建 Jenkins + Gitee 实现代码自动化构建 Jenkins + Gitee 实现代码自动化构建 Jenkins + Gitee 实现代码...

    Jmeter+Jenkins+maven接口自动化集成

    Jmeter+Jenkins+maven 接口自动化集成测试框架是一种自动化测试解决方案,旨在简化测试过程,提高测试效率和测试质量。该框架通过集成 Jmeter、Jenkins 和 Maven 三个软件工具,实现了自动化测试、自动构建和自动...

    Docker + Jenkins + Gitlab + Pytest + Allure 接口自动化测试之持续集成.zip

    Docker + Jenkins + Gitlab + Pytest + Allure 接口自动化测试之持续集成.zip

    K8S+DockerCE+Jenkins+Maven+Gitlab自动化打包部署

    * 使用 K8S+DockerCE+Jenkins+Maven+Gitlab 实现自动化打包部署,需要配置 Jenkins 和 Gitlab,以实现自动化构建和部署。 * 需要编写 Jenkinsfile,以实现自动化构建和部署。 * 需要配置 Gitlab,以实现自动化代码...

    Jenkins+Jmeter+ant接口自动化框架.docx

    Jenkins+Jmeter+ant 接口自动化框架 Jenkins、Jmeter 和 Ant 是三种不同的工具,它们之间可以结合使用,以实现自动化测试和接口自动化。本文将介绍如何使用 Jenkins、Jmeter 和 Ant 实现接口自动化测试,并将其应用...

    jenkins+ant+jmeter自动化接口测试框架搭建

    总结来说,搭建Jenkins+Ant+JMeter自动化接口测试框架涉及到软件工具的安装配置、环境变量的设置、测试脚本的编写和执行、以及自动构建和测试流程的管理。这个过程不仅需要掌握各个工具的使用方法,还需要有一定的...

    Jmeter+Jenkins+maven接口自动化集成.rar

    通过这种集成方式,我们可以实现接口测试的自动化和持续集成,提高测试效率,减少人工介入,确保软件质量。同时,这种集成方案也具有很好的扩展性,可以与其他工具(如Git、Docker等)配合,形成更完善的DevOps流程...

    postman+newman+jenkins+git APItest自动化集成测试 ppt文档

    "Postman+Newman+Jenkins+Git API测试自动化集成测试" Postman是一款功能强大的API测试工具,能够帮助开发者快速测试和验证API。然而,在实际应用中,手动点击Runner进行测试的方式不够灵活和高效,因此引入了...

    Docker+Jenkins+GitLab+Maven+Harbor+SpringBoot自动化构建

    1. Docker+Jenkins+GitLab+Maven+Harbor+SpringBoot自动化构建+Jenkins自动化部署配置 2.无须运维部署 ,而是相关的开发人员,测试人员登录jenkins传入需要部署的tag即可,整个部署过程无须运维参与,解放运维劳动力

    gitlab+jenkins+docker自动化部署脚本

    gitlab+jenkins+docker自动化部署脚本,采用shell与python开发,其中python部分均为封装成型的逻辑,只接受shell传参就能完成项目构建

    Gitllab+Jenkins+Docker+Harbor 自动化部署流程

    Gitllab+Jenkins+Docker+Harbor 自动化部署流程 一、 版本控制系统 Gitllab Gitllab 是一个基于 web 的 Git 仓库管理系统,提供了一个强大且灵活的平台来管理 Git 项目。 Gitllab 允许用户创建、管理和共享 Git ...

    Docker+Jenkins+GitLab+Maven+SpringBoot自动化构建.pdf

    Docker+Jenkins+GitLab+Maven+SpringBoot&SpringCloud;自动化构建

    Java项目包 Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署

    Java项目的自动化构建、打包和部署是现代开发流程中的重要环节,极大地提高了开发效率和产品质量。在本项目中,我们利用Jenkins、Maven、Gitlab和Tomcat这四个工具实现了一个完整的自动化工作流。 首先,让我们来...

    jenkins+git+maven搭建自动化部署环境

    jenkins+git+maven搭建自动化部署环境说明文档,详尽的说明

    tomcat+jenkins+gitlab搭建自动化测试环境

    主要讲述了自动化框架的搭建及主从机的调度,文中也有引用别人的博客

    Jenkins+Docker 实现一键自动化部署项目.docx

    Jenkins+Docker 实现一键自动化部署项目 本文将详细介绍如何使用 Jenkins 与 Docker 实现一键自动化部署项目。该项目环境基于 Centos 7,使用 Git(Gitee)版本控制系统。整个过程可以分为四个步骤:安装 Docker、...

    基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署

    基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署 本文主要介绍了基于Jenkins、Gitlab和Docker实现SpringBoot项目自动部署的...通过使用Jenkins和Gitlab,我们可以实现自动化构建和部署,提高开发效率和质量。

    Jenkins+Maven+SVN+Tomcat 持续集成环境快捷部署

    整个持续集成环境部署完成后,开发人员每提交一次代码更改,Jenkins就会自动运行预设的构建任务,完成代码的编译、打包、部署等一系列自动化流程,从而提高开发效率和软件质量。 需要注意的是,在实际操作中可能会...

Global site tag (gtag.js) - Google Analytics