大家好,我叫董鑫,一名在测试开发道路上的新手。第一阶段的学习已然结束,收获颇多,了解了很多在自己平时测试工作无法接触到的新知识,比如这次在这里分享的Sonarqube进行静态代码扫描并集成Jenkins的知识,是分享也是自我学习的总结。若有不对的地方,还请各位同行,同学,老师及时指正。

1. 什么是SonarQube

SonarQube是一个开源的代码质量管理系统,用于检测代码中的错误,漏洞和代码规范,通过插件的机制,

可以基于现有的GitlabJenkins 集成、以便在项目拉取后进行连续的代码检查。

优点:

◆ 支持众多计算机编程语言

◆ 通过插件机制能集成IDE、Jenkins、Git等

◆ 内置大量常用代码检查规则

◆ 支持定制开发规则

◆ 可视化界面

◆ 支持从可靠性、安全性、可维护性、覆盖率、重复率等 方面分析项目

具体的配置及文档可以访问下面的链接查看:

https://www.sonarqube.org/downloads/
https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/

2. Jenkins插件安装及配置

Sonarqube想要与Jenkins集成,需要安装相应的插件来支持。

在插件管理中搜索名为Sonarqube Scanner for Jenkins的插件 并安装。

安装好插件后,还需要配置相应的服务和工具信息:

2.1. 系统设置->SonarQube servers

  • name:可自定义)
  • server url:这个地址就是你sonar服务所在的地址
  • token:在sonar项目中生成的token

2.2. 全局工具配置》SonarQube Scanner

建议不采用自动安装,使用手动下载配置好的sonar scanner

  • name:自定义sonar scanner名称,建议使用sonar-scanner
  • SONAR_RUNNER_HOME:sonar scanner所在的家目录

3. 自由风格的job使用sonar

3.1 配置代码仓库地址:

3.2 勾选sonarqube 服务并选择token:

3.3 在构建中添加Exeute SonarQube Sanner

这里可以使用两种方式:

  • a. 直接将sonar-project.properties配置内容写到 Analysis properties 中
  • b. 将配置好的sonar-project.properties文件放置在代码目录中,在 Path to project properties 配置相应的文件名

建议使用第二种方式来管理

我配置的sonar-project.properties文件如下:

保存好后,就可以来构建了。构建后项目页面可以直接跳转到sonarqube服务查看。

4. pipeline流水线使用sonar

4.1 构建一个流水线job,流水线pipeline script如下编写:

pipeline {
agent any stages {
stage('拉取代码') {
steps {
git credentialsId: 'gitee', url: 'https://gitee.com/dx0001/work.git'
}
}
stage('静态代码静态扫描') {
steps {
withSonarQubeEnv('sonarqube'){
bat "sonar-scanner"
}
}
}
}

注意: 这里的名称是在Jenkins中系统管理--sonarqube servers添加的名称

同样的,设置好job后就可以构建进行代码扫描了。

5. 接入Sonar质量门禁

通过上面的job,只是代码扫描可能无法满足日常的情况,当扫描的结构不满足时我可能就不进行后面的步骤了,这样的情况,我们就需要接入质量门禁的方式来实现。

5.1 在sonar服务端的质量阀中设置质量门禁,添加要运用的项目

质量配置->质量阀

这里可以添加指标来定义通过扫描的条件。然后将设置的质量阀分配给要扫描的项目。

5.2 在sonar服务端的配置里面添加网络调用hook

配置->网络调用

这里添加Jenkins调用的地址,用来回调扫描的结果。URL配置为:Jenkins地址+/sonarqube-webhook

5.3 流水线改造

pipeline {
agent any stages {
stage('拉取代码') {
steps {
git credentialsId: 'gitee', url: 'https://gitee.com/dx0001/work.git'
}
}
stage('静态代码静态扫描') {
steps {
withSonarQubeEnv('sonarqube'){
bat "sonar-scanner"
}
}
}
stage('检查结果分析') {
steps {
script{
timeout(5){
def qg=waitForQualityGate()
echo "结果状态:${qg.status}"
if(qg.status!='OK')
error '未达到代码门禁要求!'
}
}
}
}
}
}

在上面的流水线的job上增加一个“检查结果分析”的步骤,使用waitForQualityDate()的方法来获取扫描是否通过质量阀的状态值。最后使用if条件来判断,不通过时则使用“error”来中断流程,实现质量门禁的功能。

6. 小结

此次分享就到这里了,更多的是自我知识沉淀的过程,第一阶段的学习虽已结束,但对于我更多的是开始,很多的知识需要自己动手搭环境来实践,我很享受这个过程。将一个个知识落实,弄清楚,是一件令我非常高兴的事情。接触并学习更多测试开发的知识,在测试的道路上越走越宽,越走越远,为此,奋力前进!

超详细,自动化测试接入Jenkins+Sonar质量门禁实践的更多相关文章

  1. Jenkins+Sonar质量门禁【实践篇-maven版】

    Jenkins+Sonar质量门禁[实践篇-maven版] 配置文档百度挺多的,就不展开来了 首先很遗憾的告诉大家,maven版做不了质量门禁!只能扫描!!!     就我们公司项目里,jenkins ...

  2. 测开新手:从0到1,自动化测试接入Jenkins学习

    大家好,我叫董鑫,一个在测试开发道路上的新手,之前一直从事手工功能测试,前段时间抽空又温习了一遍老师全栈测开训练营中自动化测试.CICD的知识,最近公司正好有一个项目可以实践练手,趁热打铁,将自动化测 ...

  3. CODING DevOps 系列第四课:DevOps 中的质量内建实践

    什么是质量内建 随着时间的推移,我们项目的开发效率会逐渐降低,直到几年之后整个项目可能就无法维护,只能推倒重来.具体的表现首先就是随着时间推移,我们会发现整个需求列表里面能做的需求越来越少,因为每当我 ...

  4. WebRTC VideoEngine超详细教程(三)——集成X264编码和ffmpeg解码

    转自:http://blog.csdn.net/nonmarking/article/details/47958395 本系列目前共三篇文章,后续还会更新 WebRTC VideoEngine超详细教 ...

  5. MP3文件结构解析(超详细)

    转自:http://blog.csdn.net/u010650845/article/details/53520426 MP3文件结构解析(超详细) 1. MP3文件结构解析 1.1. 概述 1.1. ...

  6. VMware安装Centos7超详细教程

    本篇文章主要介绍了VMware安装Centos7超详细过程(图文),具有一定安装参考价值 在没有运维的情况下,很多时候测试需要自己搭建测试环境,而测试环境又分为QA环境,自动化测试环境,uat环境,以 ...

  7. Jenkins+Sonar 项目构建前代码审查

    一.sonar简介 1.概述 Sonar (SonarQube)是一个开源平台,用于持续检查代码质量,不只是一个质量数据报告工具,更是代码质量管理平台. 支持Java, C#, C/C++, PL/S ...

  8. 超详细的node/v8/js垃圾回收机制

    前言 垃圾回收器是一把十足的双刃剑.其好处是可以大幅简化程序的内存管理代码,因为内存管理无需程序员来操作,由此也减少了(但没有根除)长时间运转的程序的内存泄漏.对于某些程序员来说,它甚至能够提升代码的 ...

  9. 【转】(超详细)jsp与servlet之间页面跳转及参数传递实例

    初步学习JavaEE,对其中jsp与Servlet之间的传值没弄清楚,查看网上资料,发现一篇超详细的文章,收获大大,特此记录下来.具体链接:http://blog.csdn.net/ssy_shand ...

随机推荐

  1. linux学习之路第五天(文件目录类第一部分)

    文件目录类 pwd 指令 基本语法 pwd (显示当前目录的绝对路径) Ls 指令 cd 指令 -代表的是上一级目录 mkdir指令 用于创建目录 基本语法 mkdir [选项] 要创建的目录 常用选 ...

  2. MRCTF (re和crypto)wp

    RE: 一.PixelShooter(这题比赛我居然没看,靠,血亏,所以做不出来就不要一直死怼,这题挺好写的,) unity一般是用c#写的,刚好又是apk,可以用dnspy来反编译看看,在源码中找到 ...

  3. spring中如何向一个单例bean中注入非单例bean

    看到这个题目相信很多小伙伴都是懵懵的,平时我们的做法大都是下面的操作 @Component public class People{ @Autowired private Man man; } 这里如 ...

  4. 你觉得我的这段Java代码还有优化的空间吗?

    上周,因为要测试一个方法的在并发场景下的结果是不是符合预期,我写了一段单元测试的代码.写完之后截了个图发了一个朋友圈,很多人表示短短的几行代码,涉及到好几个知识点. 还有人给出了一些优化的建议.那么, ...

  5. Python使用笔记27--mysql操作封装类

    1.面向过程 1 import pymysql 2 3 #面向过程 4 mysql_info = {'host':'127.0.0.1', 5 'port':3306, 6 'user':'root' ...

  6. excel vslookup应用举例

    excel vslookup应用举例 =vslookup("第一个需要查找的对象","查找的区域范围","查找的最终目标在区域的第几列",& ...

  7. java03类与对象相关问题

    1.使用类的静态字段和构造函数,可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向他查询"你已经创建了几个对象" 1 package 第四五周; 2 3 public ...

  8. HTML5-CSS(四)

    一.CSS3 渐变效果 (1)CSS3 提供了 linear-gradient 属性实现背景颜色的渐变功能.首先,我们先看一下它的样式表,如下: //两个必须参数background-image: l ...

  9. Requests方法 -- Token获取操作

    获取token和code流程如下:a.先登陆抓包查看post(提交表单操作)头中是否有token和code关键字b.已知步骤a中出现了token和code,不登录前刷新登陆页面,查看response中 ...

  10. 【Mysql】InnoDB 引擎中的页目录

    一.页目录和槽 接上一篇,现在知道记录在页中按照主键大小顺序串成了单链表. 那么我使用主键查询的时候,最顺其自然的办法肯定是从第一条记录,也就是 Infrimum 记录开始,一直向后找,只要存在总会找 ...