当前位置:网站首页>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、构建项目测试扫描是否执行成功

如上图,整合代码质检工具完成( ̄︶ ̄)
边栏推荐
- 消失的两个月......
- 重写并自定义依赖的原生的Bean方法
- 线性表之顺序表(干货满满的分享来啦~内含顺序表全部函数代码~
- High Numbers|Calculation of Triple Integral 3|Uncle High Numbers|Handwritten Notes
- 【2023校招刷题】笔试及面试中常考知识点、手撕代码总结
- NetWorker Knowledge Corner|Easy to get an offer [Networker Interview Questions] What is the difference between a Layer 3 switch and a router?
- esp12f + tft display picture problem
- 【leetcode】剑指 Offer II 002. 二进制加法
- DNA修饰碱基5-甲基胞嘧啶和8-羟基鸟嘌呤|DNA修饰量子点|规格信息
- 暴力递归到动态规划 04 (数字字符串转化)
猜你喜欢

DNA偶联二维过渡金属硫化物|DNA修饰贵金属纳米颗粒|使用方法

MySQL active/standby switch

信用卡又一新规来袭!菊风用科技助推金融行业提升服务质效

In 2022, the latest Gansu construction staff (material staff) mock exam questions and answers

Access the company intranet

PyCharm使用教程(详细版 - 图文结合)

How to realize object selection in canvas (5)

【无标题】

Qt uses QSortFilterProxyModel for sorting and filtering in QML

浅析即时通讯移动端开发DNS域名劫持等杂症
随机推荐
【C语言入门】ZZULIOJ 1036-1040
【leetcode】82. 删除排序链表中的重复元素 II(中等)
r‘w‘r‘w‘r‘w‘r
《MySQL DBA封神打怪之路》专栏学习大纲
纳米金颗粒修饰核酸产品|碳纳米管载核酸-DNA/RNA材料|解析说明
DNA修饰纳米金颗粒|DNA脱氧核糖核酸偶联修饰碳纳米材料|实验原理
[2023 School Recruitment Questions] Summary of Common Interview Questions (7. Common Bus Protocols) (Continuously updated with subsequent interviews....)
Another new rule for credit cards is coming!Juphoon uses technology to boost the financial industry to improve service quality and efficiency
DNA脱氧核糖核酸修饰石墨粉末|DNA修饰还原石墨烯功能材料|保存温度
kaniko --customPlatform parameter: support image construction of different platforms (eg: arm, etc.)
C语言初阶-初识C语言
MQTT over QUIC:下一代物联网标准协议为消息传输场景注入新动力
线上无序的
J9 Number Theory: Why do we need Web3?
地狱挖掘者系列#1
SAP ABAP 守护进程的实现方式
什么是色选机(color sorter)?
Codeforces Round #245 (Div. 1) A (dfs)
[2023 School Recruitment Questions] Summary of knowledge points and hand-tear code in the written test and interview
【leetcode】50. Pow(x, n)(中等)(快速幂)