1 安装 SonarQube 服务器

helm upgrade --install sonarqube sonarqube --repo https://charts.kubesphere.io/main -n devops --create-namespace --set image.tag=8.9.1-community

image-20211008152622637

1.1 配置 SonarQubeingress 访问

cat sonarqube-ingress.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: sonarqube-ingress
namespace: kubesphere-devops-system
annotations:
kubesphere.io/creator: admin
nginx.ingress.kubernetes.io/proxy-body-size: 30M #很重要,不加会上传不了扫描结果
nginx.ingress.kubernetes.io/proxy-buffer-size: 128k
nginx.ingress.kubernetes.io/proxy-buffers-number: '32'
nginx.ingress.kubernetes.io/proxy-connect-timeout: '3600'
nginx.ingress.kubernetes.io/proxy-read-timeout: '3600'
nginx.ingress.kubernetes.io/proxy-send-timeout: '3600'
nginx.ingress.kubernetes.io/client-body-buffer-size: 128k
spec:
rules:
- host: sonar.rx.cn #自己域名
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
serviceName: sonarqube-sonarqube #service名称
servicePort: 80

kubecat apply -f sonarqube-ingress.yaml -n devops

1.2 配置 dns

vim /var/named/rx.cn.zone

1
sonar    A       10.188.179.200

1.3 配置 SonarQube 服务器

1.3.1 配置 SonarQube 插件持久化

1
2
3
4
5
6
7
    volumeMounts:
- name: volume-plugins
mountPath: /opt/sonarqube/extensions
volumes:
- name: volume-plugins
persistentVolumeClaim:
claimName: sonarqube

1.3.2 配置 SonarQube 的 Webhooks 的返回地址

kubectl edit configmap sonarqube-sonarqube-config -n devopssonar.core.serverBaseURL=http://sonar.rx.cn

1.4 安装插件

ls /opt/sonarqube/extensions/plugins

1.5 重启后查看状态查看 SonarQube 的状态

kubectl get pod -n devops
image-20211008153511911

1.6 访问http://sonar.rx.cn/

看到这个说明插件安装成功

image-20211008155831855

2 配置 Jenkins 集成 SonarQube

2.1 创建 SonarQube 管理员令牌 (Token)

2.1.1 点击右上角字母 A,然后从菜单中选择我的账户以转到配置页面

image-20211008160644833

2.1.2 输入令牌名称,例如 test,点击生成并复制此令牌

image-20211008161011835

2.2 Jenkins 安装插件

image-20211008161535162

访问 Jenkins 地址:端口/sonarqubewebhook 出现这样表示插件安装成功

image-20211008161819246

2.3 配置 sonarqube 的 webhook

依次点击配置,配置 和 网络调用 创建一个 Webhook。

image-20211008162109996

点击 创建。

在弹出对话框中输入 名称 和 Jenkins Console URL(即 SonarQube Webhook 地址)。点击创建完成操作。

image-20211008162626091

2.4 将 SonarQube 服务器添加至 Jenkins

2.4.1 Jenkins 添加凭据,凭据 系统 全局凭据

image-20211008163514903

使用刚才 SonarQube 管理员令牌创建的凭证

image-20211008163802989

2.5 Jenkins 添加 SonarQube 地址

image-20211008164113416

3 使用 SonarQube 代码扫描

3.1 新建项目

image-20211008164214208

image-20211008164236033

3.2 创建项目令牌

image-20211008164254811

3.3 Jenkins 流水线配置

1
2
3
4
5
6
7
sh '''
mvn clean package -U -Dmaven.test.skip=true sonar:sonar \
-Dsonar.projectKey=$APP_NAME-start \ #项目名称变量
-Dsonar.host.url=$SONARURL \ #sonar地址变量
-Dsonar.analysis.branch=$BRANCH_NAME \ #分支变量
-Dsonar.login=$SONARTOKEN #刚才创建的项目token
'''

4 钉钉告警

下载钉钉机器人插件

启动

nohup ./sonar-dingtalk-plugin-1.0.0-linux &

5 扫描加固

5.1 配置 p3c 规则

image-20211008165451207

先清空所有条件在搜索 p3c,然后点批量修改image-20211008165615562

image-20211008165705014

5.2 配置 bug 扫描,SonarQube 默认自带的就很好用,直接复制过来批量激活

image-20211008170223594

5.3 配置漏洞扫描,跟刚才差不多

image-20211008170315780