Jenkins集成sonarQube实现代码质量检查过程图解
作者:东溪陈姓少年 发布时间:2023-08-30 10:32:52
1.sonarQube的简介
SonarQube是一款自动化代码审查工具,用于检测代码中的错误、漏洞和代码异味。它可以与你现有的工作流集成,以支持跨项目分支和拉取请求的连续代码检查。
其工作流程如下:
如图SonarQube由以下4个组件组成:
1.SonarQube Server:
WebServer:供开发人员,管理人员浏览高质量的快照并配置SonarQube实例Search Server:基于Elasticsearch的Search Server从UI进行后退搜索(历史)computeEngine:负责处理代码分析报告并将其保存在SonarQube数据库中
2.SonarQube Database:
SonarQube实例的配置(安全性、插件设置等)项目、视图等的质量快照。
3.SonarQube Plugins:服务器上安装了多个SonarQube插件,可能包括语言,SCM,集成,身份验证和管理插件
4.SonarScanners:多种sonar扫描组件,在构建/持续集成服务器上运行以分析项目。
关于sonar的具体介绍可参考其官网。
2.SonarQube的安装
SonarQube提供了多种安装方式,本文将使用docker镜像的安装方式进行演示。
1.拉取sonarQube的docker容器
$> docker pull sonarqube:8.2-community
2.创建docker数据卷
#包含数据文件,例如嵌入式H2数据库和Elasticsearch索引
$> docker volume create --name sonarqube_data
#包含插件,例如语言分析器
$> docker volume create --name sonarqube_extensions
#包含有关访问,Web流程,CE流程和Elasticsearch的SonarQube日志
$> docker volume create --name sonarqube_logs
3.配置本地数据库(示例使用postgresql)
如果使用postgresql的默认schema "public",则无需这一步。如果想自定义schema,则执行以下命令
ALTER USER mySonarUser SET search_path to <自定义的schema名称>
4.启动sonarQube
$> docker run -d --name sonarqube \
-p 9000:9000 \
#以下为给sonarQube的数据库配置,推荐postgresql
-e SONAR_JDBC_URL=jdbc:postgresql://xxxx:5432/postgres \
-e SONAR_JDBC_USERNAME=... \
-e SONAR_JDBC_PASSWORD=... \
-v sonarqube_data:/opt/sonarqube/data \
-v sonarqube_extensions:/opt/sonarqube/extensions \
-v sonarqube_logs:/opt/sonarqube/logs \
<image_name>
本地浏览器访问localhost:9000即可访问。
3.sonarQube中创建项目步骤
1:新建项目
步骤2:填写项目信息
步骤3:创建令牌
步骤4:记录令牌
创建项目完成,并且记录下令牌,后续步骤会用到。
4.jenkins配置sonarQube插件1.安装sonarQube插件
在jenkins>Manage Jenkins>global configuration中配置sonar的信息,如下图:
name为自定义的名字,serverURL为sonarqube的访问地址
最后一项token需要添加。点击添加,如下图:
类型选择 Secret text,并将我们在第三步中得到的token填入secret栏,其余栏目自定义。添加完后,回到上一步Server authentication token选择刚刚添加的token。
5.项目中引入sonarQube
以下为maven单模块项目示例:
1.引入sonarqube插件:
<!--添加参数,指定projectKey,即在sonar中创建项目时的名称-->
<properties>
<sonar.projectKey>sonar-demo</sonar.projectKey>
</properties>
<!--添加sonarqube插件-->
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.6.0.1398</version>
</plugin>
2.手动代码扫描
执行以下命令
mvn sonar:sonar \
-Dsonar.projectKey=sonar的项目名称 \
-Dsonar.host.url=http://sonar的地址 \
-Dsonar.login=第三步记录的令牌
执行完成回到sonarQube界面,可看到扫描记录及结果:
6.jenkins pipeline中集成sonarqube
在jenkinsfile中定义代码静态检查的stage,如下图:
上图中定义了两个stage,1.代码静态检查 2.检查结果分析
⚠️:检查结果分析阶段jenkins通过sonarqube的回调来得知扫描结果,需要在sonarqube中配置webhook:
webhook域名为jenkins地址域名。
至此,在jenkins pipeline(流水线)中成功集成sonarqube,如下图:
7.sonarQube自定义质量阀
1.创建自定义质量阀
配置质量阀
例如当阀值过高时,扫描结果不符合阀值要求,扫描结果则会失败。
示例中我们随便调整某个条件至当前项目无法到达的值
此时当pipeline在运行的时候,代码质量检查就会失败,因为没有达到标准。
⚠️:所以,我们在自定义自己项目的阀值的时候要视不同的项目情况而定。
8.总结
本文介绍了在jenkins多分支流水线中集成sonarQube,从而实现在持续集成中代码质量检查。文章涉及到的某些方面(jenkinsfile,sonarQube详细使用等等)没有详细介绍,只是快速带过了。sonarQube是业界知名度很高的代码检查工具,也是ci/cd中的工具生态成员。深入探索它,还会发现更多有用的,有趣的特性。代码质量检查时代码质量内建的一部分,在流水线中集成代码质量检查可以及时的发现代码中存在的问题和缺陷,从而及时修复问题,防止技术债务的堆积(还是那句话,解决问题最好的时机时问题出现的那一刻),否则当问题堆积到一定程度的时候,修复成本会越来越高。
来源:https://www.cnblogs.com/dongxishaonian/p/12672235.html
猜你喜欢
- 前一篇博文介绍了JDK logging基础知识 博文中也提到LogManager,本章主要阐述怎么完全定制化LogManager来
- 测试springboot项目出现Test Ignored今天在写springBoot项目运行测试类时出现了以下问题:Test ignored
- 方法一: IDictionaryEnumerator enumerator = thProduct.GetEn
- 今天一起学习下如何在Spring中进行异步编程。我们都知道,web服务器处理请求 request 的线程是从线程池中获取的,这也不难解释,因
- C# Linq获取两个List或数组的差集交集List<int> list1 = newList<int>();li
- 在使用spring提供的JpaTemplate进行查询时,如果数据量超过100 条,查询效率就会明显降低。由于开始时使用JPA内部的双向关联
- 官方文档:https://central.sonatype.org/publish/publish-maven/#a-complete-ex
- 一、Optional类的来源到目前为止,臭名昭著的空指针异常是导致Java应用程序失败的最常见原因。以前,为了解决空指针异常,Google公
- 前言最近接手的项目里涉及到了 GIF 动图的播放与监听,在上一版本中对于 GIF 的处理是由 H5 来实现的,因为考虑到用户体验,因此现在的
- 一、默认异常处理机制默认情况下,SpringBoot 提供 /error 请求,来处理所有异常的。1.浏览器客户端,请求头里的属性是Acce
- 1. 原因最近学习spring data JPA 时候要用到分页功能,但是发现网上所有教程都是通过new PageRequest()方法解决
- 要想充分发挥ADO.NET的优势,不仅需要全面、深入理解ADO.NET编程模型,及时总结经验、技巧也十分重要。ADO已经有多年的实践经验,A
- 一、了解Spring自动装配的方式采用传统的XML方式配置Bean组件的关键代码如下所示<bean id="userMapp
- Maven setting中私有仓库配置浅析最近遇到过不少这样那样的问题,曾经做过maven的分享,但是发现当时部分内容还是太想当然了,下面
- 举例:存在一个类:Public Class Student{ public string name; public int age;}Stu
- 一、项目运行环境配置:Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe
- 实体类时间格式化java 实体类 时间格式化注解@JsonFormat(pattern = "yyyy-MM-dd HH:mm:s
- 前言在上一篇中,我们初步了解了Sentinel的基本概念,以及其有关限流方面的基础理论,本篇将通过简单的与框架进行整合,看看Sentinel
- 在需要线程同步的时候如何选择合适的线程锁?例:选择可以存入到常量池当中的对象,String对象等public class SyncTest{
- 前言日志处理是每个项目当中一个非常重要的内容。没有了日志,也就失去了对系统的可控性。没有日志,系统出现任何问题,都会没有踪迹可寻,这对一个信