前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

作者头像
高楼Zee
发布2019-07-17 17:38:27
3.1K0
发布2019-07-17 17:38:27
举报
文章被收录于专栏:7DGroup7DGroup

前言

现如今大家越来越认识到质量前移的重要性。如果一开始就写出优质的、经过测试的代码,那么后面的测试阶段将会减少很多不必要的时间。如果开发人员迫于业务压力,一味追求项目开发进度,往往会容易形成大量的“烂代码”。 一般的烂代码体现在逻辑混乱、复杂度高、易读性差、没有单元测试和缺乏必要的注释。如果把这样的“烂代码”编译交付测试团队,那么测试人员势必会发现很多低级缺陷,甚至连冒烟测试都无法通过,这样势必会浪费很多时间,延误测试进度。 所以,回到开始,为何不一开始就是写出优质代码呢?

代码评审

我们都知道很多公司都在推行DevOps、推行测试前移,就是让测试人员尽早参与研发过程中来,有很多团队推行了测试人员参与代码评审流程,但是往往效果不是很理想,原因通常是由于测试人员代码能力有限,不熟悉业务代码逻辑,当然也就无法发现正确问题,这样也就而导致测试团队的代码评审变成了摆设。那么问题来了,有什么办法解决这种状况吗? 如果测试人员在执行代码评审的时候可以借助一些代码扫描工具,然后针对这些扫描出的问题再进一步分析,这样轻易地可以发现一些真正代码问题。

SonarQube简介

在实际的项目中,我们一般使用的多种编程语言,那么我们需要针对多种编程语言的一种扫描工具。

目前主流的是使用SonarQube代码质量分析平台。

SonarQube是一个开源的代码质量分析平台,便于管理代码的质量,可检查出项目代码的漏洞和潜在的逻辑问题。同时,它提供了丰富的插件,支持多种语言的检测, 如 Java、Python、Groovy、C#、C、C++等几十种编程语言的检测。 它主要的核心价值体现在如下几个方面:

  • 检查代码是否遵循编程标准:如命名规范,编写的规范等。
  • 检查设计存在的潜在缺陷:SonarQube通过插件Findbugs、Checkstyle等工具检测代码存在的缺陷。
  • 检测代码的重复代码量:SonarQube可以展示项目中存在大量复制粘贴的代码。
  • 检测代码中注释的程度:源码注释过多或者太少都不好,影响程序的可读可理解性。
  • 检测代码中包、类之间的关系:分析类之间的关系是否合理,复杂度情况。

SonarQube平台由4个组件组成:

  1. 一个SonarQube服务器包含三个子进程(web服务(界面管理)、搜索服务、计算引擎服务(写入数据库))
  2. 一个SonarQube数据库配置SonarQube服务
  3. 多个SonarQube插件位于解压目录extensions\plugins目录
  4. 一个或者多个SonarQube Scanners 用于分析特定的项目

SonarQube主要工作流程:

  1. 开发人员使用开发工具(IDE)上传代码到GitLab(源代码管理器);
  2. Jenkins(CI系统)SCM自动拉取代码到到编译服务器;
  3. Sonar Scanners扫描该代码检查质量,将分析结果推送到SonarQube平台,进而持久化数据库存储;
  4. 开发&测试人员可以使用IDE插件来同步SonarQube结果(java和js版本等)并可以实时在线分析分析
  5. 领导可以通过Web访问SonarQube质量平台,项目代码质量趋势一目了然

SonarQube安装配置

具体的安装部署,本文就不再重复造轮子了,大家可以参照官网的手册https://docs.sonarqube.org/latest/setup/install-server/

这里我们把一些初次使用需要注意的地方和遇到的“坑”与大家分享一下。

版本选择:

目前的版本是更新的很快,安装的时候建议选带LTS的版本,即Getthe LTS(Long-termSupport):SonarQube6.7.x长期维护版本。

SonarScanner扫描器选择:

目前支持的扫描方式:

  • SonarQube Scanner for MSBuild
  • SonarQube Scanner for Maven
  • SonarQube Scanner for Gradle
  • SonarQube Scanner for An
  • SonarQube Scanner For Jenkins
  • SonarQube Scanner

因为我们是用Jenkins做为后台的持续扫描调度服务,所以需要安装 SonarQubeScannerForJenkins插件,也就不需要安装其他的扫描器了。

在Jenkins全局配置中SonarQube服务器连接详细信息的配置。然后,使用标准Jenkins工程构建步骤从Jenkins触发SonarQube扫描分析,支持触发方式包括:

  • SonarQube Scanner
  • SonarQube Scanner for Maven
  • SonarQube Scanner for Mave
  • SonarScanner for MSBuild

分析完成后,插件将检测到构建过程中是否进行了SonarQube分析,并在Jenkins工程页面上显示徽章和小部件,其中包含指向SonarQube平台的链接以及质量阀状态。

打开构建结果的链接来查看具体的分析报告

关于数据库的选择:

SonarQube支持多种数据库,由于我们使用MySQL比较方便,所以选择的是MySQL数据库(注意不支持SonarQube数据中心版),数据库设置的字符集为UTF-8,另外考虑数据库性能,应该将表的引擎更改为InnoDB引擎。要注意配置 innodb_buffer_pool_size参数为MySQL实例分配合理的内存。

以下为建库SQL脚本:

代码语言:javascript
复制
-- 数据库
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
-- 用户
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
-- 权限
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;

关于Jenkins的配置:

在 Jenkins 项目构建过程中加入SonarScanner进行代码分析,首先需要在Jenkins工程的构建环境标签页中勾选 "Prepare SonarQube Scanner evironment"

配置 SonarQubeScanner构建步骤

  • Task to run: 输入 scan,即分析代码;
  • JDK :选择 SonarQube Scanner 使用的 JDK(注意这里必须是 JDK 不能是 JRE);
  • Path to project properties : 这里可以指定一个sonar-project.properties 文件,如果不指定的话会使用项目默认的 properties文件;
  • Analysis properties: 这里需要输入一些配置参数用来传递给 SonarQube,这里的参数优先级高于sonar-project.properties文件里面的参数,所以可以在这里来配置所有的参数以替代 sonar-project.properties文件,下面列出了一些参数,sonar.language指定了要分析的开发语言(特定的开发语言对应了特定的规则),sonar.sources定义了需要分析的源代码位置(示例中的.所指示的是当前 Jenkins项目的目录),sonar.java.binaries 定义了需要分析代码的编译后文件位置;
  • Additional arguments 输入框中可以输入一些附加的参数,示例中的-X 意思是进入SonarQube Scanner的Debug 模式,这样会输出更多的日志信息;
  • JVM Options 可以输入在执行 SonarQube Scanner是需要的JVM参数。

关于质量阀状态关联编译结果:

Jenkins支持每当代码分析无法满足SonarQube的质量标准时,即工程构建失败,Jenkins需要安装Quality Gates Plugin

另外,在项目工程中需要增加“构建后操作”,不过此插件好像有个缺陷,Project key输入框不支持${variable}形式

小团队持续代码扫描实践

技术方案&实现

1)原生的开源框架:Jenkins+SonarQube+Gitlab

2)单点执行,满足小团队要求

3)及时反馈机制:Jenkins的Montor view插件+钉钉群通知+Email通知

Montor view可以挂到团队电视看板上。

钉钉群通知

产品团队邮件通知

4)手工配置为主

流程&标准

1)项目多分支开发模型

2)Jenkins定时轮巡代码扫描

3)关注单个质量维度:代码违规

SonarQube支持多种维度代码扫描,如下图:

基于保持简单的原则,主要从代码违规维度出发,代码规则和潜在Bug测试人员跟进审核,确认是否误报,提升测试人员代码评审能力。

4)设置质量阀

团队&文化

1)领导重视代码质量 2)团队成员积极性高 3)敏捷文化形成

写在最后

DevOps开发模式目前已成为当前各大互联网公司的主流文化或技术。在DevOps中依然离不开测试,测试人员如何融入其中去?可以说,在DevOps中想要做好测试,技术上需要很多要求,主要体现在以下方面:

  • 代码基本功(Java、Python、shell、groovy)
  • 工具链(Jenkins、Gitlab、maven、ant等)
  • 容器(docker、k8s等)
  • 操作系统(linux、ssh等)
  • 自动化测试技术(如Java服务端方向:Springboot、TestNG、MyBatis/JPA、MySQL、HttpClient、ExtentReport、dubbo、http/https、Postman、Mockito等)
  • 性能测试技术(JMeter、Tomcat、Nginx、Redis、MongoDB、Telegraf、InfluxDB、Grafana、Nmon、JVM等)

当前DevOps已经很热,所以,不管是测试 or 开发 or 运维,都需要往DevOps靠拢,你的职业发展之路才能尽可能越来越长。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 7DGroup 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 代码评审
  • SonarQube简介
  • SonarQube安装配置
  • 小团队持续代码扫描实践
    • 技术方案&实现
      • 流程&标准
        • 团队&文化
        • 写在最后
        相关产品与服务
        云数据库 SQL Server
        腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档