SonarQube 是一款用于代码质量管理的开源工具,它主要用于管理源代码的质量。 通过插件形式,可以支持众多计算机语言,比如 java, C#, go,C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等。sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具来检测你的代码,帮助你发现代码的漏洞,Bug,异味等信息。

Sonar 不仅提供了对 IDE 的支持,可以在 Eclipse和 IntelliJ IDEA 这些工具里联机查看结果;同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。

Sonar可以从以下七个维度检测代码质量,而作为开发人员至少需要处理前5种代码质量问题。

  1. 不遵循代码标准

    sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写。

  2. 潜在的缺陷

    sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检 测出潜在的缺陷。

  3. 糟糕的复杂度分布

    文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员 难以理解它们, 且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。

  4. 重复

    显然程序中包含大量复制粘贴的代码是质量低下的,sonar可以展示 源码中重复严重的地方。

  5. 注释不足或者过多

    没有注释将使代码可读性变差,特别是当不可避免地出现人员变动 时,程序的可读性将大幅下降 而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷。

  6. 缺乏单元测试

    sonar可以很方便地统计并展示单元测试覆盖率。

  7. 糟糕的设计

    通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系,可以检测自定义的架构规则 通过sonar可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况, 检测耦合。

1、环境介绍

1.1、kubernetes集群环境

  1. [root@k8s-master-01 ~]# kubectl version
  2. Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.3", GitCommit:"b3cbbae08ec52a7fc73d334838e18d17e8512749", GitTreeState:"clean", BuildDate:"2019-11-13T11:23:11Z", GoVersion:"go1.12.12", Compiler:"gc", Platform:"linux/amd64"}
  3. Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.3", GitCommit:"b3cbbae08ec52a7fc73d334838e18d17e8512749", GitTreeState:"clean", BuildDate:"2019-11-13T11:13:49Z", GoVersion:"go1.12.12", Compiler:"gc", Platform:"linux/amd64"}
  4. [root@k8s-master-01 ~]# kubectl get nodes
  5. NAME STATUS ROLES AGE VERSION
  6. k8s-master-01 Ready master 5d5h v1.16.3
  7. k8s-master-02 Ready master 5d4h v1.16.3
  8. k8s-master-03 Ready master 5d4h v1.16.3
  9. k8s-node-01 Ready <none> 5d4h v1.16.3
  10. k8s-node-02 Ready <none> 5d4h v1.16.3
  11. k8s-node-03 Ready <none> 5d4h v1.16.3

1.2、存储环境

本集群中kubernetes底层存储使用的是glusterfs,并且以glusterfs作为存储创建了storageclass便于动态创建pv

  1. [root@k8s-master-01 ~]# kubectl get sc
  2. NAME PROVISIONER AGE
  3. gluster-heketi kubernetes.io/glusterfs 4d22h

1.3、sonarqube版本

SonarQube版本:7.9.1

2、部署sonarqube

SonarQube需要依赖数据库存储数据,且SonarQube7.9及其以后版本将不再支持Mysql,所以这里推荐设置PostgreSQL作为SonarQube的数据库。

2.1、部署PostgreSQL

k8s集群部署PostgreSQL,需要将数据库的数据文件持久化,因此需要创建对应的pv,本次安装通过storageclass创建pv。由于postgre只需要集群内部连接,因此采用Headless service来创建数据库对应的svc,数据库的端口是5432,最终的yaml如下

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: postgres-sonar
  5. labels:
  6. app: postgres-sonar
  7. spec:
  8. replicas: 1
  9. selector:
  10. matchLabels:
  11. app: postgres-sonar
  12. template:
  13. metadata:
  14. labels:
  15. app: postgres-sonar
  16. spec:
  17. containers:
  18. - name: postgres-sonar
  19. image: postgres:11.4
  20. imagePullPolicy: IfNotPresent
  21. ports:
  22. - containerPort: 5432
  23. env:
  24. - name: POSTGRES_DB
  25. value: "sonarDB"
  26. - name: POSTGRES_USER
  27. value: "sonarUser"
  28. - name: POSTGRES_PASSWORD
  29. value: "123456"
  30. resources:
  31. limits:
  32. cpu: 1000m
  33. memory: 2048Mi
  34. requests:
  35. cpu: 500m
  36. memory: 1024Mi
  37. volumeMounts:
  38. - name: data
  39. mountPath: /var/lib/postgresql/data
  40. volumes:
  41. - name: data
  42. persistentVolumeClaim:
  43. claimName: postgres-data
  44. ---
  45. apiVersion: v1
  46. kind: PersistentVolumeClaim
  47. metadata:
  48. name: postgres-data
  49. spec:
  50. accessModes:
  51. - ReadWriteMany
  52. storageClassName: "gluster-heketi"
  53. resources:
  54. requests:
  55. storage: 1Gi
  56. ---
  57. apiVersion: v1
  58. kind: Service
  59. metadata:
  60. name: postgres-sonar
  61. labels:
  62. app: postgres-sonar
  63. spec:
  64. clusterIP: None
  65. ports:
  66. - port: 5432
  67. protocol: TCP
  68. targetPort: 5432
  69. selector:
  70. app: postgres-sonar

执行kubectl apply创建资源,并检查对应的pv,pvc以及日志

  1. [root@k8s-master-01 ~]# kubectl get pv,pvc
  2. NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
  3. persistentvolume/pvc-f0157e05-427b-45af-8c09-9803b11f7036 1Gi RWX Retain Bound default/postgres-data gluster-heketi 133m
  4. NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
  5. persistentvolumeclaim/postgres-data Bound pvc-f0157e05-427b-45af-8c09-9803b11f7036 1Gi RWX gluster-heketi 133m
  6. [root@k8s-master-01 ~]# kubectl get pods
  7. NAME READY STATUS RESTARTS AGE
  8. [root@k8s-master-01 ~]# kubectl get pods|grep postgres
  9. postgres-sonar-75d7f8d99-sxdnn 1/1 Running 0 136m

2.2、部署SonarQube

先看看yaml,后面附上说明:

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: sonarqube
  5. labels:
  6. app: sonarqube
  7. spec:
  8. replicas: 1
  9. selector:
  10. matchLabels:
  11. app: sonarqube
  12. template:
  13. metadata:
  14. labels:
  15. app: sonarqube
  16. spec:
  17. initContainers:
  18. - name: init-sysctl
  19. image: busybox
  20. imagePullPolicy: IfNotPresent
  21. command: ["sysctl", "-w", "vm.max_map_count=262144"]
  22. securityContext:
  23. privileged: true
  24. containers:
  25. - name: sonarqube
  26. image: sonarqube:lts
  27. ports:
  28. - containerPort: 9000
  29. env:
  30. - name: SONARQUBE_JDBC_USERNAME
  31. value: "sonarUser"
  32. - name: SONARQUBE_JDBC_PASSWORD
  33. value: "123456"
  34. - name: SONARQUBE_JDBC_URL
  35. value: "jdbc:postgresql://postgres-sonar:5432/sonarDB"
  36. livenessProbe:
  37. httpGet:
  38. path: /sessions/new
  39. port: 9000
  40. initialDelaySeconds: 60
  41. periodSeconds: 30
  42. readinessProbe:
  43. httpGet:
  44. path: /sessions/new
  45. port: 9000
  46. initialDelaySeconds: 60
  47. periodSeconds: 30
  48. failureThreshold: 6
  49. resources:
  50. limits:
  51. cpu: 2000m
  52. memory: 2048Mi
  53. requests:
  54. cpu: 1000m
  55. memory: 1024Mi
  56. volumeMounts:
  57. - mountPath: /opt/sonarqube/conf
  58. name: data
  59. subPath: conf
  60. - mountPath: /opt/sonarqube/data
  61. name: data
  62. subPath: data
  63. - mountPath: /opt/sonarqube/extensions
  64. name: data
  65. subPath: extensions
  66. volumes:
  67. - name: data
  68. persistentVolumeClaim:
  69. claimName: sonarqube-data
  70. ---
  71. apiVersion: v1
  72. kind: PersistentVolumeClaim
  73. metadata:
  74. name: sonarqube-data
  75. spec:
  76. accessModes:
  77. - ReadWriteMany
  78. storageClassName: "gluster-heketi"
  79. resources:
  80. requests:
  81. storage: 10Gi
  82. ---
  83. apiVersion: v1
  84. kind: Service
  85. metadata:
  86. name: sonarqube
  87. labels:
  88. app: sonarqube
  89. spec:
  90. type: NodePort
  91. ports:
  92. - name: sonarqube
  93. port: 9000
  94. targetPort: 9000
  95. nodePort: 30003
  96. protocol: TCP
  97. selector:
  98. app: sonarqube
  • 通过官方的sonar镜像部署,通过环境变量指定连接数据库的地址信息,同样通过storageclass来提供存储卷,通过NodePort方式暴露服务。
  • 与常规部署不同的是,这里对sonar通过init container进行了初始化,执行修改了容器的vm.max_map_count大小。修改这里的原因可以参考官方文档

修改此权限需要授权能执行系统命令

  1. securityContext:
  2. privileged: true

2.3、访问检查

上述部署完成后,检查控制器创建的pod是否正常,并通过nodeport方式访问即可,默认登录的用户名和密码是admin/admin

中文插件名称:Chinese Pack,安装过程在界面操作,这里省略

在k8s集群部署SonarQube的更多相关文章

  1. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...

  2. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...

  3. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...

  4. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...

  5. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...

  6. (视频)asp.net core系列之k8s集群部署视频

    0.前言 应许多网友的要求,特此录制一下k8s集群部署的视频.在录制完成后发现视频的声音存在一点瑕疵,不过不影响大家的观感. 一.视频说明 1.视频地址: 如果有不懂,或者有疑问的欢迎留言.视频分为两 ...

  7. 基于k8s集群部署prometheus监控ingress nginx

    目录 基于k8s集群部署prometheus监控ingress nginx 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署pro ...

  8. 基于k8s集群部署prometheus监控etcd

    目录 基于k8s集群部署prometheus监控etcd 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署prometheus监控 ...

  9. 菜鸟系列k8s——k8s集群部署(2)

    k8s集群部署 1. 角色分配 角色 IP 安装组件 k8s-master 10.0.0.170 kube-apiserver,kube-controller-manager,kube-schedul ...

随机推荐

  1. 【ML基础】皮尔森相关系数(Pearson correlation coefficient)

    前言 参考 1. 皮尔森相关系数(Pearson correlation coefficient): 完

  2. png8和png24的根本区别

    1.png8和png24的根本区别,不是颜色位的区别,而是存储方式不同. 2.png8有1位的布尔透明通道(要么完全透明,要么完全不透明),png24则有8位(256阶)的布尔透明通道(所谓半透明). ...

  3. 【ARM-Linux开发】【CUDA开发】NVIDIA Jetson TX2 进阶:Nsight Eclipse Edition

    嵌入式平台:NVIDIA Jetson TX2 嵌入式系统:Ubuntu16.04 虚拟机系统:Ubuntu14.04 一.NSight简介 Jetpack开发工具为人工智能提供了一整套软件架构,包括 ...

  4. PAT 1093

    The string APPAPT contains two PAT's as substrings. The first one is formed by the 2nd, the 4th, and ...

  5. ASP.NET-------GridView中的字段居中不了

    在使用Grid View 控件的时候,回合一些css 放在一块使用之后你会发现  字段没有居中 你会发现该什么都不行 比如: HeaderStyle-HorizontalAlign="Cen ...

  6. Jmeter在Http Rest接口中自动生成签名(Json格式请求参数)

    第一步: 签名的java类生成jar包,导入到jmeter的lib目录下(依赖的第三方包也要导入) 第二步:编写jmeter脚本,这里使用BeanShell 进行签名串的生成,目录结构如下: Bean ...

  7. Linux Docker Introduction

    Setup on Ubuntu. 前提条件: Docker需要两个重要的安装要求: 它仅适用于64位Linux安装,注意:是64位的Linux系统. 它需要Linux内核版本3.10或更高版本. 要查 ...

  8. tomcat启动时报No rules found matching 'Server/Service/Engine/Host/context'

    tomcat是8.0版本. 在eclipse启动时,第二行报这个, 同时项目也没加载(tomcat启动成功了). 网上搜了半天, 试了半天, 没搞定. 最后不经意间发现: <Context do ...

  9. Java数据结构-ArrayList最细致的解析笔记

    ArrayList是一个类,这个类有一个数组参数elementData,ArrayList集合中的元素正是保存在这个数组中,它继承了数组查询的高性能,参考第3篇.ArrayList还封装了很多方法,便 ...

  10. springBoot入门到精通-Simple

    https://blog.csdn.net/zhiyikeji/article/details/84346189 1.springBoot前期准备 1.环境配置:jdk,maven 2.编写工具:st ...