1、简介
Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量。
通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测。
2、sonarQube能带来什么?
1.糟糕的复杂度分布
文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们,且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。
2.重复
显然程序中包含大量复制粘贴的代码是质量低下的,sonar可以展示源码中重复严重的地方。
3.缺乏单元测试
sonar可以很方便地统计并展示单元测试覆盖率。
4.没有代码标准
sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写。
5.没有足够的或者过多的注释
没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷。
6.潜在的bug
sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检测出潜在的bug。
7.糟糕的设计(原文Spaghetti Design,意大利面式设计)
- 通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系。
- 可以检测自定义的架构规则。
- 通过sonar可以管理第三方的jar包。
- 可以利用LCOM4检测单个任务规则的应用情况。
- 检测耦合。
3、SonarQube安装
大约在0.6版,privileged被引入docker。使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。甚至允许你在docker容器中启动docker容器。
[root@test-te1 /usr/local/docker/sonarqube_docker]# vim docker-compose.yml
version: '3'
services:
postgres:
image: postgres
restart: always
container_name: postgres
ports:
- 5432:5432
volumes:
- /usr/local/docker/postgres/postgresql/:/var/lib/postgresql
- /usr/local/docker/postgres/data/:/var/lib/postgresql/data
environment:
TZ: Asia/Shanghai
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar123
POSTGRES_DB: sonar
networks:
- sonar-network
privileged: true
sonar:
image: sonarqube:8.9.6-community
restart: always
container_name: sonar
depends_on:
- postgres
volumes:
- /usr/local/docker/sonarqube/extensions:/opt/sonarqube/extensions
- /usr/local/docker/sonarqube/logs:/opt/sonarqube/logs
- /usr/local/docker/sonarqube/data:/opt/sonarqube/data
- /usr/local/docker/sonarqube/conf:/opt/sonarqube/conf
ports:
- 9000:9000
environment:
SONARQUBE_JDBC_USERNAME: sonar
SONARQUBE_JDBC_PASSWORD: sonar123
SONARQUBE_JDBC_URL: jdbc:postgresql://postgres:5432/sonar
networks:
- sonar-network
privileged: true
networks:
sonar-network:
driver: bridge
4、SonarQube启动
[root@test-te1 /usr/local/docker/sonarqube_docker]# docker-compose up -d --build
5、客户端配置
客户端下载地址:https://binaries.sonarsource.com/Distribution/sonarqube/
[root@test-te1 /usr/local/docker/sonarqube_docker]# unzip sonar-scanner-4.6.1.2450-linux.zip
[root@test-te1 /usr/local/docker/sonarqube_docker]# mv sonar-scanner-4.6.1.2450-linux sonar-scanner
[root@test-te1 /usr/local/docker/sonarqube_docker]# mv sonar-scanner /var/lib/jenkins/
6、修改配置文件
更改主机IP,取消注释
[root@test-te1 /var/lib/jenkins/sonar-scanner/conf]# cd /var/lib/jenkins/sonar-scanner/conf/
[root@test-te1 /var/lib/jenkins/sonar-scanner/conf]# ls
sonar-scanner.properties
[root@test-te1 /var/lib/jenkins/sonar-scanner/conf]# vim sonar-scanner.properties
#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here
#----- Default SonarQube server
sonar.host.url=http://10.1.98.53:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
7、下载Jenkins插件
chinese ------》 Localization: Chinese (Simplified)
SonarQube -------》SonarQube Scanner for Jenkins
8、整合Jenkins(配置System Configuration)
9、整合Jenkins(添加凭证)
10、整合Jenkins(配置Global Tool Configuration)
11、整合Jenkins(添加编译步骤)
sonar.projectname=${JOB_NAME}
sonar.projectKey=${JOB_NAME}
sonar.source=./
sonar.java.binaries=target
sonar.java.binaries=./target
关于运维学习、分享、交流,笔者开通了微信公众号【IT运维大爆炸】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学运维知识。
本文暂时没有评论,来添加一个吧(●'◡'●)