热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用Jenkins与SonarQube集成实现高效代码质量检测与优化

本文探讨了通过在Jenkins多分支流水线中集成SonarQube,实现高效且自动化的代码质量检测与优化方法。该方案不仅提高了开发团队的代码审查效率,还确保了软件项目的持续高质量交付。
本文介绍了在jenkins多分支流水线中集成sonarQube,从而实现在持续集成中代码质量检查。

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 \
    

本地浏览器访问localhost:9000即可访问。


3.sonarQube中创建项目

步骤1:新建项目

企业微信截图_3a0966e9-ebb8-4878-8d1c-985bd65c0009

步骤2:填写项目信息

image-20200409183243933

步骤3:创建令牌

image-20200409183631966

步骤4:记录令牌

image-20200409183801845

创建项目完成,并且记录下令牌,后续步骤会用到。


4.jenkins配置sonarQube插件

1.安装sonarQube插件

image-20200409181901457

2.添加sonarQube配置

在jenkins>Manage Jenkins>global configuration中配置sonar的信息,如下图:

image-20200409184010520

name为自定义的名字,serverURL为sonarqube的访问地址

最后一项token需要添加。点击添加,如下图:

image-20200409184332842

类型选择 Secret text,并将我们在第三步中得到的token填入secret栏,其余栏目自定义。添加完后,回到上一步Server authentication token选择刚刚添加的token。


5.项目中引入sonarQube

以下为maven单模块项目示例:

1.引入sonarqube插件:



	sonar-demo



  org.sonarsource.scanner.maven
  sonar-maven-plugin
  3.6.0.1398

2.手动代码扫描

执行以下命令

mvn sonar:sonar \
  -Dsonar.projectKey=sonar的项目名称 \
  -Dsonar.host.url=http://sonar的地址 \
  -Dsonar.login=第三步记录的令牌

执行完成回到sonarQube界面,可看到扫描记录及结果:

image-20200409184114645


6.jenkins pipeline中集成sonarqube

在jenkinsfile中定义代码静态检查的stage,如下图:

image-20200409234426724

上图中定义了两个stage,1.代码静态检查 2.检查结果分析

⚠️:检查结果分析阶段jenkins通过sonarqube的回调来得知扫描结果,需要在sonarqube中配置webhook:

image-20200409184522988

webhook域名为jenkins地址域名。

至此,在jenkins pipeline(流水线)中成功集成sonarqube,如下图:

image-20200409184044044



7.sonarQube自定义质量阀

1.创建自定义质量阀

image-20200409184142238

2.配置质量阀

image-20200409184212688

3.测试

例如当阀值过高时,扫描结果不符合阀值要求,扫描结果则会失败。

示例中我们随便调整某个条件至当前项目无法到达的值

image-20200410103807909

此时当pipeline在运行的时候,代码质量检查就会失败,因为没有达到标准。

image-20200410104030284

⚠️:所以,我们在自定义自己项目的阀值的时候要视不同的项目情况而定。


8.总结

本文介绍了在jenkins多分支流水线中集成sonarQube,从而实现在持续集成中代码质量检查。文章涉及到的某些方面(jenkinsfile,postgresql搭建,sonarQube详细使用等等)没有详细介绍,只是快速带过了。sonarQube是业界知名度很高的代码检查工具,也是ci/cd中的工具生态成员。深入探索它,还会发现更多有用的,有趣的特性。代码质量检查时代码质量内建的一部分,在流水线中集成代码质量检查可以及时的发现代码中存在的问题和缺陷,从而及时修复问题,防止技术债务的堆积(还是那句话,解决问题最好的时机时问题出现的那一刻),否则当问题堆积到一定程度的时候,修复成本会越来越高。希望本文是一块敲门砖,能让读者了解持续集成的魅力,以至于吸引你自己去深入了解它。


关注笔者公众号,推送各类原创/优质技术文章 ⬇️


推荐阅读
  • MySQL 5.6 引入了全局事务标识符(GTID)和多线程复制机制,显著提升了数据库的可靠性和性能。GTID 作为一种新的事务标识方式,确保了事务在主从节点间的一致性,避免了传统基于日志位置的复制可能出现的问题。多线程复制则通过并行处理多个复制任务,大幅提高了复制效率,特别是在大型数据库环境中表现更为突出。这些新特性不仅增强了 MySQL 的高可用性和扩展性,还为数据库管理带来了更多灵活性和便利性。 ... [详细]
  • Nginx入门指南:从零开始掌握基础配置与优化技巧
    Nginx入门指南:从零开始掌握基础配置与优化技巧 ... [详细]
  • 前言: 网上搭建k8s的文章很多,但很多都无法按其说明在阿里云ecs服务器成功搭建,所以我就花了些时间基于自己成功搭建k8s的步骤写了个操作手册,希望对想搭建k8s环境的盆友有所帮 ... [详细]
  • 在使用 PHP 通过 SSL 安全连接到 MySQLi 数据库服务器时,遇到了一些技术难题。我的环境包括一个 Web 服务器和一个数据库服务器,两者均使用 OpenSSL 生成了证书。尽管证书内容一致,但在尝试从 Web 服务器使用 `mysql` 命令进行连接时,仍然遇到了问题。为了确保连接的安全性和稳定性,需要进一步检查证书配置和 PHP 的 SSL 设置,以排除潜在的配置错误或兼容性问题。 ... [详细]
  • 在安装 Greenplum 的过程中,正确配置 `gpinitsystem_config` 文件是至关重要的一步。本文详细介绍了如何优化该文件,以确保数据库集群的高效初始化和稳定运行。通过调整关键参数,用户可以更好地适应不同的硬件环境和业务需求,从而提升系统的整体性能。 ... [详细]
  • 在Linux系统中Nginx环境下SSL证书的安装步骤与WordPress CDN的高级配置指南
    在Linux系统中,Nginx环境下安装SSL证书的具体步骤及WordPress CDN的高级配置指南。首先,安装SSL证书需要准备两个关键配置文件,并建议在操作前备份相关服务器配置文件,以确保数据安全。随后,本文将详细介绍如何在Nginx中正确配置SSL证书,以及如何优化WordPress的CDN设置,提升网站性能和安全性。 ... [详细]
  • 程序连接MySQL数据库的多种方法详解 ... [详细]
  • 全面解析:安检利器的高效应用与技术特点
    全面解析:安检利器的高效应用与技术特点 ... [详细]
  • MySQL 8.0 中的二进制日志格式详细解析及其官方文档参考。本文介绍了MySQL服务器如何使用不同的日志记录格式来记录二进制日志,包括早期版本中基于SQL语句的复制机制(即基于语句的日志记录)。此外,还探讨了其他日志记录方式,如基于行的日志记录和混合日志记录模式,并提供了配置和管理这些日志格式的最佳实践。 ... [详细]
  • 阿里云 Fun 部署工具 v3.6.5 版本更新发布
    阿里云 Fun 部署工具 v3.6.5 版本已正式发布。该工具专为 Serverless 应用的部署而设计,能够简化函数计算、API 网关和日志服务等资源的管理。借助一个资源配置文件(template.yml),用户可以轻松完成开发、构建和部署等操作。更多详细信息请参阅阿里云 Serverless 文档。 ... [详细]
  • 本文详细介绍了在 CentOS 6.7 x64 环境下配置 MySQL 5.6.29 的 GTID 主从复制方法。主库 IP 为 192.168.0.65,备库 IP 为 192.168.0.66。通过逐步指导,帮助读者顺利实现高可用性和数据一致性。 ... [详细]
  • 如何在 Node.js 中高效管理和优化通用实例对象(如 Redis)的使用? ... [详细]
  • SpringDataJPA是SpringBoot体系中约定优于配置的最佳实现,大大简化了项目中数据库的操作。从本课开始将会从JPA的由来开始讲解,什么是JPA、SpringBoot ... [详细]
  • 无法将文件下载到AWSLambda ... [详细]
  • 在 Asp.net 应用中,动态加载 DropDownList 控件的数据源是一项常见需求。本文探讨了如何高效地从数据库中获取数据,并实时更新下拉列表,确保用户界面始终与后台数据保持同步。通过使用 ADO.NET 和 LINQ to SQL 技术,开发者可以轻松实现这一功能,同时提高应用的性能和用户体验。文中还提供了代码示例和最佳实践,帮助开发者解决常见的数据绑定问题。 ... [详细]
author-avatar
mobiledu2502881283
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有