当前位置:网站首页>devops学习(七) sonarqube 代码质检工具
devops学习(七) sonarqube 代码质检工具
2022-07-29 23:05:00 【默子昂】
我们之前的代码都是直接推送到gitlab后通过jenkins去打包就完事了
程序具体好不好使就看测试那边了,为了提前发现BUG我们需要一个代码质检工具sonarqube
一、部署sonarQube 代码质检工具
1、安装
//官方地址
http://sonarqube.org/
//切换到我们部署devops的目录
cd /apps/devops_setup/vi postgres-sonarQube.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-sonar
namespace: devops
labels:
app: postgres-sonar
spec:
replicas: 1
selector:
matchLabels:
app: postgres-sonar
template:
metadata:
labels:
app: postgres-sonar
spec:
containers:
- name: postgres-sonar
image: postgres:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 5432
env:
- name: POSTGRES_DB
value: "sonarDB"
- name: POSTGRES_USER
value: "sonarUser"
- name: POSTGRES_PASSWORD
value: "123456"
volumeMounts:
- name: data
mountPath: /var/lib/postgresql/data
volumes:
- name: data
hostPath:
path: /apps/devops_setup/data/postgres/data
type: DirectoryOrCreate
---
apiVersion: v1
kind: Service
metadata:
name: postgres-sonar
namespace: devops
labels:
app: postgres-sonar
spec:
clusterIP: None
ports:
- port: 5432
protocol: TCP
targetPort: 5432
selector:
app: postgres-sonar
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: sonarqube
namespace: devops
labels:
app: sonarqube
spec:
replicas: 1
selector:
matchLabels:
app: sonarqube
template:
metadata:
labels:
app: sonarqube
spec:
initContainers:
- name: init-sysctl
image: busybox
imagePullPolicy: IfNotPresent
command: ["sysctl", "-w", "vm.max_map_count=262144"]
securityContext:
privileged: true
dnsConfig:
nameservers: ["114.114.114.114"]
containers:
- name: sonarqube
image: sonarqube:latest
ports:
- containerPort: 9000
env:
- name: SONARQUBE_JDBC_USERNAME
value: "sonarUser"
- name: SONARQUBE_JDBC_PASSWORD
value: "123456"
- name: SONARQUBE_JDBC_URL
value: "jdbc:postgresql://postgres-sonar:5432/sonarDB"
livenessProbe:
httpGet:
path: /sessions/new
port: 9000
initialDelaySeconds: 60
periodSeconds: 30
readinessProbe:
httpGet:
path: /sessions/new
port: 9000
initialDelaySeconds: 60
periodSeconds: 30
failureThreshold: 6
volumeMounts:
- mountPath: /opt/sonarqube/conf
name: data
subPath: conf
- mountPath: /opt/sonarqube/data
name: data
subPath: data
- mountPath: /opt/sonarqube/extensions
name: data
subPath: extensions
volumes:
- name: data
hostPath:
path: /apps/devops_setup/data/sonarqube/data
type: DirectoryOrCreate
---
apiVersion: v1
kind: Service
metadata:
name: sonarqube
namespace: devops
labels:
app: sonarqube
spec:
type: NodePort
ports:
- name: sonarqube
port: 9000
targetPort: 9000
nodePort: 30006
protocol: TCP
selector:
app: sonarqube
部署
kubectl apply -f postgres-sonarQube.yaml
kubectl -n devops get pod
说明
上面sonarQube需要去公网下载插件,所以需要解析公网的dns,在上面的配置中我添加了
dnsConfig:
nameservers: ["114.114.114.114"]这样我们在启动容器时候就会自带一个公网dns解析了,不需要去挂载宿主机的解析
前面jenkins 也可以用这种方法,因为这里需要和数据库通讯所以不用前面default模式
这样一来,既可以用集群内部解析,也能解析到公网ip

2、访问页面
http://101.43.4.210:30006
//这里登陆是用的默认密码,不是我们上面yaml文件中定义的密码
admin
admin
//初次登陆时会要修改密码我这里改成
123456
3、安装中文插件

在插件安装的地方搜索chinese 点击上面的同意后install 安装
4、离线安装插件
很多情况下我们都无法直接安装插件,那么我们就只能下载下来后手动安装
//插件下载地址
https://github.com/xuhuisheng/sonar-l10n-zh/releases
//创建插件存放目录
mkdir -p /apps/devops_setup/data/sonarqube/data/extensions/plugins/
cd /apps/devops_setup/data/sonarqube/data/extensions/plugins/
//拉取插件包
wget https://github.com/xuhuisheng/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-9.5/sonar-l10n-zh-plugin-9.5.jar
//删除pod重新加载即可二、sonarQube Scanner 代码扫描插件
我们这里通过sonarQube Scanner工具 将我们的代码发送到sonarQkube上
1、部署扫描插件
//下载软件包
cd /root
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.0.2311-linux.zip
unzip sonar-scanner-cli-4.6.0.2311-linux.zip
mv sonar-scanner-4.6.0.2311-linux/ sonar-scanner
//切换到配置目录
cd /root/sonar-scanner/conf/
vi sonar-scanner.properties
sonar.host.url=http://101.43.4.210:30006 //sonarQube 地址
sonar.sourceEncoding=UTF-8 //取消注释
2、挂载到jenkins
我们将上面配置好的工具 挂载到jenkins目录中使用
mv /root/sonar-scanner /apps/devops_setup/data/jenkins/data/
3、生成sonarQube 登陆token
我们在使用sonarQube Scanner 需要将信息发送到sonarQube中,这一步是要认证的

得到了用户的token令牌
squ_8413ea81b0e219590c792a7e784e55c465b716d53、手动测试sonarQube Scanner
//切换到我们项目代码目录
cd /apps/devops_setup/data/jenkins/data/workspace/mytest/
//使用扫描工具扫描项目代码并发送到sonarQube
/apps/devops_setup/data/jenkins/data/sonar-scanner/bin/sonar-scanner \
-Dsoanr.sources=./ \
-Dsonar.projectname=linux-test \
-Dsonar.login=squ_8413ea81b0e219590c792a7e784e55c465b716d5 \
-Dsonar.projectKey=linux-test \
-Dsonar.java.binaries=./target参数说明
//1、指定扫描工具bin文件路径
/apps/devops_setup/data/jenkins/data/sonar-scanner/bin/sonar-scanner
//2、 指定要扫描的代码项目路径 这里是 ./ 当前目录
-Dsoanr.sources=./
//3、指定项目名称是什么,就是我们在sonarQube上看到的项目是什么
-Dsonar.projectname=linux-test
//4、认证token
-Dsonar.login=squ_8413ea81b0e219590c792a7e784e55c465b716d5
//5、项目名称key 和项目名称相同即可
-Dsonar.projectKey=linux-test
//6、指定项目文件打包地址,就是build地址,当前目录下的./target目录
-Dsonar.java.binaries=./target
回到sonarQube上查看

哇咔咔,一上来就有BUG了( •̀ ω •́ )*
三、整合jenkins 与sonarQube
1、安装SonarQube Scanner插件

SonarQube servers2、配置插件发送的SonarQube地址

这里把添加配置和添加认证信息分开,因为这里直接点添加认证容易卡死
//认证类型
secrets Text
//token值 上面拿的
squ_8413ea81b0e219590c792a7e784e55c465b716d5
//描述
SonarQube-token
3、全局配置扫描工具路径
//名称
sonar-scanner
//工具路径 (我们是挂载进去的,挂载的默认路径是/var/jenkins_home/ 所以是这个路径)
/var/jenkins_home/sonar-scanner/

4、配置项目中使用扫描工具
//添加构建操作--选择
Execute SonarQube Scanner
//指定JDK环境 这个是我们全局配置
JDK
//sonarQube 扫描工具命令
//这里我们不需要带-D 开头,直接输入参数就可以了
//这里的JOB_NAME 变量是我们jenkins项目名称的值,其他和上面我们手动跑的一样
sonar.projectname=${JOB_NAME}
sonar.projectKey=${JOB_NAME}
soanr.sources=./
sonar.java.binaries=./target 
刚才我们手动跑的时候在mytest项目下面自动创建了一个文件,先删掉在构建
cd /apps/devops_setup/data/jenkins/data/workspace/mytest/
rm -rf .scannerwork/5、构建项目测试扫描是否执行成功

如上图,整合代码质检工具完成( ̄︶ ̄)
边栏推荐
- 网工知识角|轻松拿offer【网工面试题】三层交换机与路由器有什么区别?
- 2022年最新甘肃建筑施工焊工(建筑特种作业)模拟题库及答案解析
- The first round of the real offer harvester~ How does the big factory inspect the candidates?(with detailed answer)
- 【leetcode】剑指 Offer II 002. 二进制加法
- 新型LaaS协议Elephant Swap给ePLATO提供可持续溢价空间
- 信用卡又一新规来袭!菊风用科技助推金融行业提升服务质效
- 运动步数抽奖小程序开发
- pnpm + workspace + changesets 构建你的 monorepo 工程
- Mysql内外连接
- MySQL active/standby switch
猜你喜欢

BGP联邦综合实验

Redis和MySQL如何保持数据一致性

jenkins use and maintenance

【无标题】清空吗

Raspberry pie wiringPi 2.6 installed on solving gpio readall command mistakes

VsCode更新后,怎么使用使用快捷键同时生成多个元素

@Accessors 注解详解

The Sandbox 与 Gravity 达成合作,将《RO仙境传说》带入元宇宙

三子棋(用C语言写)

The Sandbox Partners with Gravity to Bring RO Ragnarok to the Metaverse
随机推荐
【openlayers】地图【一】
cached_network_image 多个图片卡顿崩溃
在树莓派上安装 PyCharm
@Autowired与@Resource区别
【leetcode】50. Pow(x, n)(中等)(快速幂)
三子棋(用C语言写)
微信小程序滑动导航栏(网页浮动窗口怎么设置)
SAP ABAP Netweaver 容器化的一些前沿性研究工作分享
Hell Diggers Series #1
kaniko --customPlatform parameter: support image construction of different platforms (eg: arm, etc.)
y81.第四章 Prometheus大厂监控体系及实战 -- 监控扩展(十二)
NetWorker Knowledge Corner|Easy to get an offer [Networker Interview Questions] What is the difference between a Layer 3 switch and a router?
华为14天-(3)内核开发
消失的两个月......
SAP UI5 FileUploader 的隐藏 iframe 设计明细
设计消息队列存储消息的MySQL表格
SAP ABAP 守护进程的实现方式
go语言中的goroutine(协程)
[C] list explanation (headless ChanXiangFei cycle)
乐理&吉他技巧