Jenkins 质量扫描
代码质量扫描工具(SonarQube)
质量评审
SonarQube有四个关键组件
◼ SonarQube Server运行有三个组件
◆ Web Server:UI
◆ Search Server:为UI提供搜索功能,基于ElasticSearch
◆ Compute Engine Server:处理代码分析报告并将之存储到SonarQube Database中
◼ SonarQube Database:负责存储SonarQube的配置,以及项目的质量快照等
◼ SonarQube Plugin
◼ Code analysis Scanners:代码扫描器,扫描后将报告提交给SonarQube Server
下载
https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-10.2.1.78527.zip
apt update && apt install openjdk-11-jdk
root@ubuntu20:~# sysctl -w vm.max_map_count=524288
vm.max_map_count = 524288
sysctl -w fs.file-max=131072
添加到/etc/sysctl.conf
vm.max_map_count = 524288
fs.file-max=131072
sysctl -p
部署步骤1:安装Postgresql 12
apt install postgresql -y
pg_createcluster 12 main --start #初始化并启动
部署步骤2:配置Postgresql 12
root@ubuntu20:~# vi /etc/postgresql/12/main/postgresql.conf
listen_addresses = ‘*’
root@ubuntu20:/etc/postgresql/12/main# vi pg_hba.conf
host all all 0.0.0.0/0 md5
root@ubuntu20:/etc/postgresql/12/main# systemctl restart postgresql
root@ubuntu20:/etc/postgresql/12/main# systemctl enable postgresql
部署步骤3:为SonarQube初始化数据库
创建用户并授权
root@ubuntu20:/etc/postgresql/12/main# su - postgres
postgres@ubuntu20:~$ psql -U postgres
psql (12.16 (Ubuntu 12.16-0ubuntu0.20.04.1))
Type “help” for help.
postgres=# CREATE USER sonarqube WITH ENCRYPTED PASSWORD ‘magedu.com’;
postgres=# CREATE DATABASE sonarqube OWNER sonarqube;
CREATE DATABASE
postgres=# GRANT ALL PRIVILEGES ON DATABASE sonarqube TO sonarqube;
GRANT
postgres=# ALTER USER postgres WITH ENCRYPTED PASSWORD ‘www.magedu.com’;
ALTER ROLE
部署步骤4:测试Postgresql数据库的连通性
root@ubuntu20:/etc/postgresql# psql -U sonarqube -h 192.168.1.52
部署步骤5:安装SonarQube
root@ubuntu20:/usr/local# unzip sonarqube-10.2.1.78527.zip -d /usr/local
cd /usr/local/
root@ubuntu20:/usr/local# ln -sv sonarqube-10.2.1.78527/ sonarqube
创建用于运行SonarQube的普通用户,并将安装目录下的文件授权该用户访问
useradd -m sonarqube
chown -R sonarqube.sonarqube /usr/local/sonarqube/*
部署步骤6: 配置SonarQube
配置SonarQube,编辑conf/sonar.properties配置文件,修改关键参数
root@ubuntu20:/usr/local/sonarqube/conf# vi sonar.properties
修改连接数据库的账号和密码
sonar.jdbc.username=sonarqube
sonar.jdbc.password=magedu.com
修改数据库相关的URL,这里以此前配置的postgresql为例,其中的localhost为DB服务器的地址,而sonarqube为数据库名称;
sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube
#设定Web Server监听的地址和端口
sonar.web.host=0.0.0.0
sonar.web.port=9000
如有必要,可修改SonarQube持久存储数据的位置,以下两个相对路径,均起始于sonarqube的安装目录,我们也可以使用绝对路径;
sonar.path.data=data
sonar.path.temp=temp
启动
root@ubuntu20:/usr/local/sonarqube/conf# su - sonarqube -c “/usr/local/sonarqube/bin/linux-x86-64/sonar.sh start”
/usr/bin/java
Starting SonarQube…
Started SonarQube.
启动不了,可能跟java版本有关,太低,安装17版本后成功启动
访问
http://192.168.1.52:9000/
默认用户和密码admin
修改密码为qq号

安装 sonar-scanner
sonar-scanner-cli-5.0.1.3006-linux.zip
下载
https://docs.sonarsource.com/sonarqube/latest/analyzing-source-code/scanners/sonarscanner/
root@ubuntu20:~# ln -sv /usr/local/sonar-scanner-5.0.1.3006-linux/ /usr/local/sonar-scanner



定义分析参数
root@ubuntu20:/usr/local/sonar-scanner/conf# vi sonar-scanner.properties
sonar.host.url=http://localhost:9000
sonar.sourceEncoding=UTF-8
sonar.login=jenkins
sonar.password=2368756722
sonar.log.level=INFO
sonar.verbose=false
克隆项目
项目里定义文件
root@ubuntu20:~/spring-boot-helloWorld# cat sonar-project.properties
# 项目的惟一标识
sonar.projectKey= spring-boot-helleworld
# 项目的名称,用于显示在sonar web中
sonar.projectName=spring-boot-helleworld
# 项目的版本
sonar.projectVersion=0.9.8
# 需要分析的源码所在的目录
sonar.sources=.
# targe的位置
sonar.java.binaries=.
# 指定项目中使用的编程语言
sonar.language=java
#编码格式
sonar.sourceEncoding=UTF-8
root@ubuntu20:~/spring-boot-helloWorld# /usr/local/sonar-scanner/bin/sonar-scanner

Jenkins和SonarQube
配置Jenkins接入SonarQube进行代码质量评估
配置Jenkins使用sonar-scanner进行代码质量扫描,并
将结果报告给SonarQube Server的主要步骤如下
◼ 首先,在Jenkins上安装SonarQube Scanner插件
◼ 其次,配置Jenkins对接到SonarQube Server
◼ 第三,配置Jenkins的全局工具sonar-scanner
◼ 第四,在SonarQube上添加回调Jenkins的Webhook
◼ 第五,在Jenkins项目上调用sonar-scanner进行代码质
量扫描
◼ 最后,通过SonarQube确认扫描结果的评估;
认证到 SonarQube Server
SonarQube Server拒绝匿名访问时,需要配置Jenkins上的Sonar-Scanner工具可自动完成认证
◼ 在SonarQube上创建用户账号(不建议使用admin账号)
◆配置 → 权限 → 用户
◼ 为用户账号赋予相应的权限,例如执行分析和置备项目
◆配置 → 权限 → 全局权限
◼ 以新建用户的身份生成令牌,该令牌将被Jenkins用于通过相应的URL打开SonarQube 设定用户权限
为用户生成认证用的token
Token在创建完成
并离开创建页面后
无法再次获取

squ_6ed44e92760413ab3006cf2a7461796c5c2f0295

将SonarQube令牌存储为Jenkins凭证
在Jenkins上保存SonarQube上Jenkins用户的令牌为凭证,凭证类型为Secret text;
Manage Jenkins → Manage Credentials

在Jenkins上添加SonarQube Server
在Jenkins的配置中,添加SonarQube Server,并选择打开该Server时使用的令牌凭证
◼ Manage Jenkins → Configure System → SonarQube Servers

在SonarQube添加Jenkins的回调接口
root@ubuntu20:~# openssl rand -hex 16
534e2dc624946e3339e45ecfd8d4d716
生成密码,只要和Jenkins保持一致即可

Jenkins配置SonarQube servers
SonaQube-Server
填写 http://192.168.1.52:9000 这个是sonarqube的服务器地址
并添加secret ,

为Jenkins添加sonar-scanner工具
为Jenkins添加全局工具sonar-scanner,以便在构建任务中调用
◼ Manage Jenkins → 全局工具配置

流水线添加构建后操作: sonarqube

执行流水线

查看有最新的代码扫描

通过maven目标 使用代码扫描

clean test package sonar:sonar -Dsonar.host.url=http://192.168.1.52:9000 -Dsonar.login=${sonarToken}

也可以在shell中调用代码质量扫描
相关文章:
Jenkins 质量扫描
代码质量扫描工具(SonarQube) 质量评审 SonarQube有四个关键组件 ◼ SonarQube Server运行有三个组件 ◆ Web Server:UI ◆ Search Server:为UI提供搜索功能,基于ElasticSearch ◆ Compute Engine Server:…...
【LeetCode刷题笔记】滑动窗口
992. K 个不同整数的子数组 解题思路: 滑动窗口 , 题目问题转化为: 求 「最多存在 K 个不同整数的子数组的个数」 与 「最多存在 K - 1 个不同整数的子数组的个数」 之差, 就是题目所求的 「恰好存在 K 个不同整数的子数组的个数」 , 最终问题就变成求解滑动窗口内,以 R …...
笔试题之指针和数组的精讲
𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…...
.secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
导言: 勒索病毒成为了网络安全的一项严峻挑战,其中.secret勒索病毒尤为引人注目。这种恶意软件通过加密用户的数据文件,使其无法访问,并勒索受害者支付赎金以获取解密密钥。本文将介绍.secret勒索病毒的基本信息,以及…...
junit写搜索树测试
用法 assertTrue(range.contains("Two")); 2个参数,右边错就打印左边. AbstractSelfBalancingBinarySearchTree abt; AbstractBinarySearchTree.Node node; Before public void setUp() { abt new AbstractSelfBalancingBinarySearchTree() { Override protecte…...
顺丰接口对接-订单创建与取消(java单元测试)
api文档 下单接口 :https://qiao.sf-express.com/Api/ApiDetails?level3393&interName%E4%B8%8B%E8%AE%A2%E5%8D%95%E6%8E%A5%E5%8F%A3-EXP_RECE_CREATE_ORDER 取消订单接口: https://qiao.sf-express.com/Api/ApiDetails?level3339&interNa…...
C++:OJ练习(每日练习!)
编程题: 题一:计算日期到天数的转换 计算日期到天数转换_牛客题霸_牛客网 (nowcoder.com) 示例1 输入: 2012 12 31 输出: 366 思路一: 第一步:创建年,月,日的变量,并按…...
GPTs Hunter 是什么?
原文: https://openaigptguide.com/openai-gpts-hunter/ GPTs Hunter 是一个功能强大的免费导航网站,支持多语言,提供用户友好的界面。 GPTs Hunter:功能强大的免费导航网站 GPTs Hunter是一个功能强大的免费导航网站ÿ…...
【移远QuecPython】EC800M物联网开发板的硬件TIM定时器精准延时
【移远QuecPython】EC800M物联网开发板的硬件TIM定时器精准延时 文章目录 导入库定时器初始化延时函数定时中断回调调用函数打包附录:列表的赋值类型和py打包列表赋值BUG复现代码改进优化总结 py打包 首先 这个定时器是硬件底层级别的 优先级最高 如果调用 会导致GN…...
HDU 1027:Ignatius and the Princess II ← next_permutation()
【题目来源】http://acm.hdu.edu.cn/showproblem.php?pid1027【题目描述】 Now our hero finds the door to the BEelzebub feng5166. He opens the door and finds feng5166 is about to kill our pretty Princess. But now the BEelzebub has to beat our hero first. feng5…...
主题讲座:全球增材制造现状与未来(暨香港科技大学广州|智能制造学域2024博士学位全额奖学金项目)
时间:2023 年11月16日(星期四)14:30 地点:合肥工业大学 学术会议中心三楼报告厅 主讲嘉宾:陈模军 助理教授 https://facultyprofiles.hkust-gz.edu.cn/faculty-personal-page/CHEN-Mojun/mjchen 报名表直达࿱…...
hugeGraph修改PropertyKey属性类型
修改PropertyKey字段属性的类型,发现没办法保留数据的前提下修改,智能是先删除数据,然后再修改,或者备份后修改再恢复。 方法一、 修改groovy脚本中的Text为Int后重新建元数据 schema.propertyKey(“youkey”).asText().valueSing…...
vscode 访问本地或者远程docker环境
1、vscode 访问docker本地环境 直接点击左下角连接图标,弹出选项可以选择容器,只要容器在本地运行者,选择attach可以看到运行中的容器可以选择,选择其中需要选择的就行 ## 运行容器,可以-d后台运行都可以 docker run…...
人工智能与充电技术:携手共创智能充电新时代
人工智能与充电技术:携手共创智能充电新时代 摘要:本文探讨了人工智能与充电技术的结合及其在未来充电设施领域的应用。通过分析智能充电系统的技术原理、优势以及挑战,本文展望了由人工智能驱动的充电技术为未来电动交通带来的巨大变革与机…...
『自定义B站视频播放速度』
哔哩哔哩 的最高播放速度是 2.0, 但对于我们这种程序员来说,2.0 速度观看学习视频还是稍微慢了点, 🫵🏻3.0 以上才是王道🫵🏻, 下面就是具体的操作方法: ① 在浏览器…...
Java入门篇 之 继承
本篇碎碎念:最近的课程遇到瓶颈了,看的时候感觉自己会了,但是结束仔细一回顾还是一知半解,一点一点来吧,基础必须要打好(自己给自己好的心里暗示,结局一定是好的) 今日份励志文案:慢慢改变,慢慢…...
如何计算掩膜图中多个封闭图形的面积
import cv2def calMaskArea(image,idx):mask cv2.inRange(image, idx, idx)contours, hierarchy cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)for contour in contours:area cv2.contourArea(contour)print("图形的面积为", area) image是…...
【Nginx】CentOS 安装Nignx
CentOS上安装Nginx: 1. 打开终端:使用SSH或者直接在服务器上打开终端。 2. 更新系统:运行以下命令以确保您的系统软件包列表是最新的: sudo yum update3. 安装Nginx:运行以下命令以安装Nginx: sudo yum…...
idea 代码快捷键Mac版
1、查询任何东西 双击 Shift2、文件内查找 Command F 3、文件内替换 Command R4、全局查找(根据路径) Command Shift F5、在当前文件跳转到某一行的指定处 Command L6、退回 / 前进到上一个操作的地方 Command Option 方向键左Command Opt…...
【NI-DAQmx入门】多通道数据采集
1.通道扩展解释 通道扩展是扩展数据采集设备的通道以包含另一个设备的通道的过程,从而有效地创建具有更多通道的任务。当使用通道扩展时,DAQmx 自动在 DAQmx 驱动程序级别路由触发器和时钟,以便多个设备同步。为了使设备作为一个整体运行&…...
四旋翼变形控制:RL与MPC在混合动力学中的对比
1. 四旋翼变形控制的技术挑战与解决方案四旋翼变形控制(Quadrotor Morpho-Transition)是当前机器人领域最具挑战性的前沿技术之一。这项技术使机器人能够在空中完成形态变换,实现从飞行模式到地面模式的平滑切换。想象一下,一架四…...
Spring Cloud AWS 实战教程:构建高可用 SQS 消息队列应用 [特殊字符]
Spring Cloud AWS 实战教程:构建高可用 SQS 消息队列应用 🚀 【免费下载链接】spring-cloud-aws The New Home for Spring Cloud AWS 项目地址: https://gitcode.com/gh_mirrors/sp/spring-cloud-aws Spring Cloud AWS 是一个强大的开源框架&…...
Blender渲染通道完全指南:如何像电影后期一样,分离出深度、阴影与反射图
Blender渲染通道完全指南:影视级后期制作的深度解析在数字内容创作领域,Blender已经从一个简单的3D建模工具成长为能够处理复杂视觉特效的全流程解决方案。对于追求影视级质量的中高级用户而言,掌握渲染通道技术是提升作品专业度的关键一步。…...
51单片机驱动ST7735S彩屏避坑指南:从5秒刷屏到流畅贪吃蛇的优化实战
51单片机驱动ST7735S彩屏性能优化实战:从卡顿到流畅游戏的蜕变之路当一块128x160分辨率的ST7735S彩屏遇上传统的51单片机,这种组合看似矛盾却又充满挑战。许多开发者初次尝试时会发现,原本在STM32等平台上运行流畅的显示驱动,移植…...
App Inventor蓝牙调试避坑指南:从连接失败到数据乱码,一次讲清所有常见问题
App Inventor蓝牙调试避坑指南:从连接失败到数据乱码的实战解决方案在移动应用开发领域,蓝牙通信一直是实现设备间短距离数据交换的核心技术之一。对于使用App Inventor的开发者而言,蓝牙模块提供了无需复杂编码即可实现无线通信的便捷途径。…...
BLE四大广播模式详解:可连接/不可连接/定向/周期广播
一、前言在低功耗蓝牙(BLE)开发中,广播(Advertising)是设备发现、连接建立、数据广播、设备重连的核心基石,所有BLE交互流程均始于广播报文的收发。不同于传统经典蓝牙,BLE所有广播行为标准化、…...
亚马逊 Rufus 关停,Alexa 正式上线:卖家必须读懂的6条新规则
2026年5月13日,亚马逊官方正式宣布,下线Rufus,推出全新AI购物助手:Alexa for Shopping。但是,这不是粗暴地直接下线 Rufus,而是一次购物AI底层架构的重组 —— 将 Rufus 的商品专长 与 Alexa的用户理解力&a…...
【紧急预警】92%的DeepSeek测试用例生成失败源于这4个隐性配置缺陷——资深SDET连夜整理修复清单
更多请点击: https://codechina.net 第一章:DeepSeek测试用例生成的现状与危机本质 当前,DeepSeek系列大模型(如DeepSeek-Coder、DeepSeek-VL)在代码生成与理解任务中展现出强大能力,但其测试用例自动生成…...
嵌入式快速原型开发:基于Sceptre平台与LPC2148的实战指南
1. 项目概述:Sceptre,一个被低估的嵌入式快速原型利器 在嵌入式开发的世界里,我们总是在寻找那个“刚刚好”的平台:它要足够强大,能跑复杂的算法;要足够小巧,能塞进各种外壳;要足够便…...
我靠这个测试设计方法,把漏测率降低了80%
当“直觉测试”撞上南墙很长一段时间里,我和许多测试同行一样,测试用例的设计主要依靠两样东西:需求文档和“测试直觉”。这种模式在业务逻辑相对简单、迭代速度平缓时还能勉强应付。一旦面对复杂的企业级应用、高频的敏捷迭代,或…...
