DevOps实现CI/CD实战(三)- 集成Sonar Qube

2024-08-26 15:20

本文主要是介绍DevOps实现CI/CD实战(三)- 集成Sonar Qube,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

七、集成Sonar Qube

1. SonarQube介绍

Sonar Qube是一个开源的代码分析平台,支持Java、Python、PHP、JavaScript、CSS等25种以上的语言,可以检测出重复代码、代码漏洞、代码规范和安全性漏洞的问题。

Sonar Qube可以与多种软件整合进行代码扫描,比如Maven,Gradle,Git,Jenkins等,并且会将代码检测结果推送回Sonar Qube并且在系统提供的UI界面上显示出来
在这里插入图片描述

2. Sonar Qube安装

sonarqube官网:https://www.sonarsource.com/products/sonarqube/downloads/

Sonar Qube在7.9版本中已经放弃了对MySQL的支持,并且建议在商业环境中采用PostgreSQL,那么

安装Sonar Qube时需要依赖PostgreSQL。并且这里会安装Sonar Qube的长期支持版本9.9

  1. 拉取镜像
docker pull postgres
docker pull sonarqubedocker pull sonarqube:8.9.3-community
  1. 编写docker-compose.yml
version: "3.1"
services:db:image: postgrescontainer_name: dbports:- 5432:5432networks:- sonarnetenvironment:POSTGRES_USER: sonarPOSTGRES_PASSWORD: sonarsonarqube:image: sonarqubecontainer_name: sonarqubedepends_on:- dbports:- "9000:9000"networks:- sonarnetenvironment:SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonarSONAR_JDBC_USERNAME: sonarSONAR_JDBC_PASSWORD: sonar
networks:sonarnet:driver: bridge
version: "3.1"
services:db:image: postgrescontainer_name: dbports:- 5432:5432networks:- sonarnetenvironment:POSTGRES_USER: sonarPOSTGRES_PASSWORD: sonarsonarqube:image: sonarqube:8.9.3-communitycontainer_name: sonarqubedepends_on:- dbports:- "9000:9000"networks:- sonarnetenvironment:SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonarSONAR_JDBC_USERNAME: sonarSONAR_JDBC_PASSWORD: sonar
networks:sonarnet:driver: bridge
  1. 运行容器
docker-compose up -d
# 查看日志 
docker-compose logs -f

在这里插入图片描述

查看日志发现报错了,要修改最大虚拟内存

vim /etc/sysctl.conf
# 添加下面的配置
vm.max_map_count=262144sysctl -p#重新启动容器
docker-compose up -d

启动完成后,访问页面

http://192.168.201.111:9000/
在这里插入图片描述
登陆进去后安装中文插件,安装后需要重启
在这里插入图片描述

4. SonarQube使用

  • Maven的方式
  1. 在maven的settings.xml中添加下面配置
    <profile><id>sonar</id><activation><activeByDefault>true</activeByDefault></activation><properties><sonar.login>admin</sonar.login><sonar.password>password</sonar.password><sonar.host.url>http://192.168.201.111:9000</sonar.host.url></properties></profile>
  1. 在代码位置执行命令:mvn sonar:sonar,然后进入sonarqube页面,进入项目已经有代码扫描结果了

  2. 在这里插入图片描述
    SonarScanner的方式

  3. 下载并安装

下载:https://docs.sonarsource.com/sonarqube/latest/analyzing-source-code/scanners/sonarscanner/

下载完成后上传的我们的服务器上,然后解压。

安装解压命令

yum -y install unzipunzip sonar-scanner-cli-6.1.0.4477-linux-x64.zip
# sonarscanner移动到jenkins挂载目录下
cd /usr/local/docker/jenkins_docker/data/
mv ~/sonar-scanner ./
  1. 修改配置
cd sonar-scanner/conf/
vim sonar-scanner.properties
# 查看sonarscanner的命令
cd /usr/local/docker/jenkins_docker/data/sonar-scanner/bin

在这里插入图片描述

进入到要检测的代码的路径下,执行代码检测命令

# 在项目所在目录执行以下命令 /usr/local/docker/jenkins_docker/data/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=linux-test -Dsonar.token=squ_162b811d946f00bfc5299629ce63f0c5b88e8813 -Dsonar.projectKey=linux-test -Dsonar.java.binaries=./target//usr/local/docker/jenkins_docker/data/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=linux-test -Dsonar.login=65a1741c6f4191105f68096278fe77adaa1d15a1 -Dsonar.projectKey=linux-test -Dsonar.java.binaries=./target/

在这里插入图片描述
Ps:主要查看我的sonar-scanner执行命令的位置, 在项目所在目录执行以下命令
在这里插入图片描述

5. Jenkins集成Sonar Qube

  1. 首先要到Jenkins插件管理页面安装sonar qube插件,安装插件的方法之前已经说过了
  2. 系统管理页面配置Sonar Qube,设置名称,地址和密码,密码可能一上来无法点击,可以先填写完成名称地址保存后,在重新进入页面就可以填写了
    在这里插入图片描述
    设置密码,这里可以选择用户名,密码的方式,也可以使用token的方式,填写完成保存即可。
    在这里插入图片描述
  3. 想到全局配置中配置Sonar Scanner

在这里插入图片描述
4. 在Jenkins的任务中添加配置项,在构建代码成功之后
在这里插入图片描述

选择执行 SonarQube Scanner在这里插入图片描述
添加下面的配置,应用保存

sonar.sources=./ 
sonar.projectname=${JOB_NAME}
sonar.login=ec31c5247b2be2d80a4797da0c13fb6c413a0fa7 
sonar.projectKey=${JOB_NAME}
sonar.java.binaries=target

在这里插入图片描述

重新构建查看日志,发现有个报错
在这里插入图片描述
解决方案也很简单,因为我们之前测试过,生成了.scannerwork/文件夹,直接到项目代码文件夹删除即可。

[root@clear ~]# cd /usr/local/docker/jenkins_docker/data/workspace/test/
[root@clear test]# ls -a
[root@clear test]# rm -rf .scannerwork/

删除之后,再次执行构建,查看日志,构建成功了,然后原有了扫描记录。
在这里插入图片描述

这篇关于DevOps实现CI/CD实战(三)- 集成Sonar Qube的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1108934

相关文章

Python xmltodict实现简化XML数据处理

《Pythonxmltodict实现简化XML数据处理》Python社区为提供了xmltodict库,它专为简化XML与Python数据结构的转换而设计,本文主要来为大家介绍一下如何使用xmltod... 目录一、引言二、XMLtodict介绍设计理念适用场景三、功能参数与属性1、parse函数2、unpa

C#实现获得某个枚举的所有名称

《C#实现获得某个枚举的所有名称》这篇文章主要为大家详细介绍了C#如何实现获得某个枚举的所有名称,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... C#中获得某个枚举的所有名称using System;using System.Collections.Generic;usi

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

C# 读写ini文件操作实现

《C#读写ini文件操作实现》本文主要介绍了C#读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、INI文件结构二、读取INI文件中的数据在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

Python使用qrcode库实现生成二维码的操作指南

《Python使用qrcode库实现生成二维码的操作指南》二维码是一种广泛使用的二维条码,因其高效的数据存储能力和易于扫描的特点,广泛应用于支付、身份验证、营销推广等领域,Pythonqrcode库是... 目录一、安装 python qrcode 库二、基本使用方法1. 生成简单二维码2. 生成带 Log

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

Redis延迟队列的实现示例

《Redis延迟队列的实现示例》Redis延迟队列是一种使用Redis实现的消息队列,本文主要介绍了Redis延迟队列的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录一、什么是 Redis 延迟队列二、实现原理三、Java 代码示例四、注意事项五、使用 Redi

C#实现WinForm控件焦点的获取与失去

《C#实现WinForm控件焦点的获取与失去》在一个数据输入表单中,当用户从一个文本框切换到另一个文本框时,需要准确地判断焦点的转移,以便进行数据验证、提示信息显示等操作,本文将探讨Winform控件... 目录前言获取焦点改变TabIndex属性值调用Focus方法失去焦点总结最后前言在一个数据输入表单