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

news2024/11/13 12:56:23

七、集成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 sonarqube

docker pull sonarqube:8.9.3-community
  1. 编写docker-compose.yml
version: "3.1"
services:
  db:
    image: postgres
    container_name: db
    ports:
      - 5432:5432
    networks:
      - sonarnet
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
  sonarqube:
    image: sonarqube
    container_name: sonarqube
    depends_on:
      - db
    ports:
      - "9000:9000"
    networks:
      - sonarnet
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
networks:
  sonarnet:
    driver: bridge
version: "3.1"
services:
  db:
    image: postgres
    container_name: db
    ports:
      - 5432:5432
    networks:
      - sonarnet
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
  sonarqube:
    image: sonarqube:8.9.3-community
    container_name: sonarqube
    depends_on:
      - db
    ports:
      - "9000:9000"
    networks:
      - sonarnet
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
networks:
  sonarnet:
    driver: bridge
  1. 运行容器
docker-compose up -d
# 查看日志 
docker-compose logs -f

在这里插入图片描述

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

vim /etc/sysctl.conf
# 添加下面的配置
vm.max_map_count=262144

sysctl -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 unzip

unzip 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/

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2075469.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大龄程序员转行AI大模型:机遇与挑战解析

前言 对于大龄程序员而言&#xff0c;转行到AI大模型领域是一个既充满挑战又极具吸引力的选择。在这个领域&#xff0c;您将有机会接触到最新的技术趋势&#xff0c;参与到前沿的项目中&#xff0c;并且有可能获得更高的薪酬。下面是一些具体的步骤和建议&#xff0c;帮助您顺…

普通人用 AI 变现的4大方向

前言 AI出现&#xff0c;几家欢喜几家愁。 有人担心受怕恐因AI被裁&#xff0c;有人却早已利用AI躺赚&#x1f4b0;。 “利用AI发展副业的方式究竟有哪些&#xff1f;怎么样才能利用AI做到躺赚&#xff1f;” 我相信这是绝大部分人的疑惑点&#xff0c;包括我&#xff01;&…

【AI大模型】提示词(Prompt)全面解析

文章目录 前言前置准备&#xff08;非常重要&#xff09;一、Prompt 提示词介绍1.1 Prompt 的重要性 二、Prompt 提示词元素构成与实践2.1 关键字2.2 上下文2.3 格式要求2.4 实践示例 三、Prompt 提示词编写原理3.1 清晰性3.2 具体性3.3 适应性 四、Prompt 提示词编写常用的分隔…

LLaMA Factory微调Llama3模型

LLaMA Factory是一款开源低代码大模型微调框架&#xff0c;集成了业界最广泛使用的微调技术&#xff0c;支持通过Web UI界面零代码微调大模型&#xff0c;目前已经成为开源社区内最受欢迎的微调框架。 &#x1f4a5;GPU推荐使用24GB显存的A10&#xff08;ecs.gn7i-c8g1.2xlarg…

Stable Diffusion【XL Lora】效果太赞了!AI助力服装设计,让服装拆分设计就是这么高效

今天带了一款 非常适合服装设计的SD XL Lora模型——【服装拆分】绪儿 分类背景 XUER&#xff0c;该模型是由绪儿大佬炼制&#xff0c;非常适合饰品服装分类背景。绪儿大佬其实推出了很多非常棒的模型&#xff0c;比如之前非常受大家喜欢的敦煌飞天、超梦幻场景等模型。 那么我…

如何区分住宅代理与数据中心代理?

随着代理市场的蓬勃发展&#xff0c;不同类型的代理服务应运而生&#xff0c;其中住宅代理与数据中心代理尤为常见。如何区分住宅代理与数据中心代理&#xff0c;成为了诸多用户面临的难题&#xff0c;本文将与大家详细探讨如何区分这二种代理。 首先&#xff0c;我们来看住宅代…

【解压即玩】使命召唤 系列-2,回味经典

《使命召唤2》&#xff08;英语&#xff1a;Call of Duty 2&#xff0c;香港和台湾译作“决胜时刻2”&#xff09;于2005年推出&#xff0c;游戏提供了苏军、英军、美军三大阵营的战役&#xff0c;重现了二战中的经典战役&#xff0c;例如莫斯科保卫战、斯大林格勒保卫战、诺曼…

VTK随笔五:VTK数据的读写

VTK应用程序所需的数据可以通过两种途径获取&#xff1a;第一种是生成模型&#xff0c;然后处理这些模型数据(如由类 vtkCylinderSource 生成的多边形数据)&#xff1b;第二种是从外部存储介质里导入相关的数据文件&#xff0c;然后在应用程序中处理这些读入的数据(如vkBMPRead…

三网话费充值api接口有哪些优势?你了解多少?

一、话费充值 API 接口定义 话费充值 API 接口是一种专门为实现话费充值业务而设计的接口。通过接入该接口&#xff0c;个人或企业可以搭建话费充值平台&#xff0c;其界面展示与官方平台充值页面相似&#xff0c;可自动配置充值范围并支持三大运营商话费充值。 二、话费接口…

专业版SSL证书:强化网站安全的首选

专业版SSL证书&#xff0c;专为追求极致网站安全的企业设计。它不仅提供高强度的加密保护&#xff0c;有效防止数据在传输过程中被窃取或篡改&#xff0c;还通过严格的身份验证流程&#xff0c;向访客展示网站的真实身份。其独特的绿色地址栏或公司名显示功能&#xff0c;显著增…

打手机检测算法源码样本展示打手机检测算法实际应用场景介绍

打手机检测算法是一种利用计算机视觉技术来监测和识别人们在特定区域如驾驶舱、考场或其他敏感区域非法使用手机的行为。这种算法对于提高安全性和确保规则的遵守具有重要意义。以下是关于打手机检测算法源码及其实际应用的详细阐述&#xff1a; 1. 算法实现 - 深度学习框架&a…

探秘小米SU7亏损背后的真相:雷军的战略布局与汽车行业的逆袭

近日&#xff0c;小米发布了史上最佳单季财报&#xff0c;营收达到了889亿元&#xff0c;同比增长20.1%。然而&#xff0c;小米汽车业务的亏损依然引发了广泛关注。特别是&#xff0c;小米SU7每卖一辆亏损约6万元&#xff0c;但雷军对此却显得非常淡定甚至乐观。这背后究竟隐藏…

Leetcode面试经典150题-72.编辑距离

解法都在代码里&#xff0c;不懂就留言或者私信 动态规划最经典题之一&#xff0c;如果写不出来&#xff0c;动态规划好好再学学 class Solution {/**这个题是动态规划最经典的题&#xff0c;另一个最经典的是背包问题 */public int minDistance(String word1, String word2)…

解读vue3源码-响应式篇3 effect副作用函数

提示&#xff1a;看到我 请让我滚去学习 文章目录 前言effect问题拓展分支切换与 cleanup嵌套的 effect 与 effect 栈解决在副作用函数中同时读取和操作同一属性时无限循环 effect函数实现computed-api 实现图解在这里插入图片描述 总结 前言 什么是副作用函数&#xff1f; 在…

使用 Python 进行时间序列特征提取,从理论到实践

以下是提取时间序列分析特征时需要了解的所有内容 时间序列是一种特殊的动物。欢迎来到雲闪世界。 当我开始我的机器学习职业生涯时&#xff0c;我这样做是因为我喜欢物理&#xff08;开始机器学习的奇怪原因&#xff09;&#xff0c;并且从物理学中我了解到我也非常喜欢编码…

构建技术故障应急响应机制:开发团队的全面策略

构建技术故障应急响应机制&#xff1a;开发团队的全面策略 前言一、快速响应与问题定位实时监控与预警日志管理与分析分布式追踪紧急响应机制 二、预案与备份机制应急预案制定应急演练数据备份与恢复冗余部署与负载均衡 三、事后总结与持续改进全面复盘成果转化与实施持续改进机…

Prompt + 工作流组件 = AI智能体:开启智能化新时代

在这个信息爆炸的时代&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的速度改变着我们的生活和工作方式。随着技术的不断进步&#xff0c;AI的应用场景也在不断扩展。而在这一过程中&#xff0c;Prompt和工作流组件的结合&#xff0c;正是构建AI智能体的关键所在…

Android中apk安装过程源码解析

本文中使用的Android源码基于Android 14 1 三方应用安装apk调用方法 public void installApk() {Intent intent new Intent(Intent.ACTION_VIEW);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);/** 自Android N开始&#xff0c;是通过FileProvider共享相关文件&#xff0…

NTU发布即插即用的嵌入式SLAM新SOTA!

导读&#xff1a; 当前的SLAM技术正逐渐向轻量化和高效化发展&#xff0c;在保证定位精度的同时&#xff0c;研究者们越来越倾向于简化冗余的框架&#xff0c;以在效率和性能之间找到最佳平衡点。 一个优秀的SLAM系统不仅需要提供精确的定位数据&#xff0c;还必须能够在不同平…

【PyQt】切换界面的实现

前言一、介绍二、代码2.1 QStackedWidget2.1.1 代码2.1.2 运行结果展示 2.2 QTabWidget2.2.1 代码2.2.2 运行结果展示 2.3 QDockWidget2.3.1 代码2.3.2 运行结果展示 PULSE结果 总结 前言 实现几个界面的切换展示的效果。 一、介绍 在 PyQt 中实现一个主界面包含其他子界面的…