前言
项目管理是困难的,所以需要借助一些工具去规范代码,扫描出代码潜在的缺陷。这方便SonarQube非常优秀,我们先介绍一下SonarQube检查功能:1,不遵守代码标准(checkstyle)
2,潜在缺陷(空指针)
3,糟糕的复杂度(难以理解)
4,重复(通用的方法需要归纳封装)
5,糟糕的注释
7,糟糕的设计(耦合度检查)
docker部署
docker pull jenkinsci/blueocean docker run -d --name myjenkins -p 8080:8080 -p 50000:50000 -v /data/jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/git:/usr/local/git -v /usr/bin/mvn:/usr/local/mvn -v /etc/localtime:/etc/localtime docker.io/jenkinsci/blueocean docker pull sonarqube:9.6.1-community vim docker-compose.yaml version: "3.1" services: db: image: postgres container_name: db ports: - 5432:5432 networks: - sonarnet environment: POSTGRES_USER: sonar POSTGRES_PASSWORD: sonar volumes: - ./pg_db:/var/lib/postgresql - ./pg_data:/var/lib/postgresql/data privileged: true sonarqube: image: sonarqube:9.6.1-community container_name: sonarqube depends_on: - db ports: - 9000:9000 networks: - sonarnet environment: SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar SONAR_JDBC_USERNAME: sonar SONAR_JDBC_PASSWORD: sonar volumes: - ./logs:/opt/sonarqube/logs - ./data:/opt/sonarqube/data - ./extensions:/opt/sonarqube/extensions privileged: true networks: sonarnet: driver: bridge
错误1
[root
@localhost
sonarqube]# docker logs -f sonarqube
09
:
43
:
55.666
[main] WARN org.sonar.application.config.AppSettingsLoaderImpl - Configuration file not found: /opt/sonarqube/conf/sonar.properties
2022.10
.
12
09
:
43
:
55
INFO app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /opt/sonarqube/temp
2022.10
.
12
09
:
43
:
55
INFO app[][o.s.a.es.EsSettings] Elasticsearch listening on [HTTP:
127.0
.
0.1
:
9001
, TCP:
127.0
.
0.1
:
43874
]
2022.10
.
12
09
:
43
:
55
INFO app[][o.s.a.ProcessLauncherImpl] Launch process[ELASTICSEARCH] from [/opt/sonarqube/elasticsearch]: /opt/sonarqube/elasticsearch/bin/elasticsearch
could not find java in ES_JAVA_HOME at /usr/lib/jvm/java-
11
-openjdk/bin/java
2022.10
.
12
09
:
43
:
55
WARN app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [ElasticSearch]:
1
2022.10
.
12
09
:
43
:
55
INFO app[][o.s.a.SchedulerImpl] Waiting
for
Elasticsearch to be up and running
2022.10
.
12
09
:
43
:
55
INFO app[][o.s.a.SchedulerImpl] Process[ElasticSearch] is stopped
2022.10
.
12
09
:
43
:
55
INFO app[][o.s.a.SchedulerImpl] SonarQube is stopped
[root
@localhost
sonarqube]# docker logs -f db
ls: cannot access
'/docker-entrypoint-initdb.d/'
: Operation not permitted
ls: cannot access
'/docker-entrypoint-initdb.d/'
: Operation not permitted
ls: cannot access
'/docker-entrypoint-initdb.d/'
: Operation not permitted
解决1:
1如果是docker run 需要 加上参数 –privileged=true
2如果是docker-compose.yaml 需要加上 privileged: true错误原因:权限不足的问题引起的
接着访问: 就可以了,默认管理员用户和密码为:admin/admin。
问题2:
解决2:
sonar自带数据库,但是会被提示
嵌入式数据库应仅用于评估目的、嵌入式数据库无法扩展,不支持升级到SonarQube的较新版本,也不支持将数据从中迁移到其他数据库引擎。
以上错误原因是我的yaml 有问题,问题已修复
改完需 将目录与docker实例全部删除重新做
cd /data/sonarqube
docker stop db sonarqube
docker rm -f db sonarqube
rm -rf data extensions logs pg_d*
docker-compose up -d
然后登陆页面去看,错误提示消失
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
641eea952d57 sonarqube:
9.6
.
1
-community
"/opt/sonarqube/bi..."
5
seconds ago Up
4
seconds
0.0
.
0.0
:
9000
->
9000
/tcp sonarqube
99c631eb5b0d postgres
"docker-entrypoint..."
6
seconds ago Up
5
seconds
0.0
.
0.0
:
5432
->
5432
/tcp db
1884515515a6 docker.io/jenkinsci/blueocean
"/sbin/tini -- /us..."
23
hours ago Up
23
hours
0.0
.
0.0
:
8080
->
8080
/tcp,
0.0
.
0.0
:
50000
->
50000
/tcp myjenkins
配置sonarqube
先来安装一个汉化插件吧
SonarQube
提供了强大的插件管理功能,以中文语言包为示例,讲解如何安装插件:
登录成功后,选择Administration ——> Marketplace ——> Plugins
,在搜索框输入Chinese
就可以选择安装了
问题3
插件页面能搜到插件,但是没有install按钮; 需要选择上面的声明阅读后,才能出现install的按钮。【如果不在部署的那台机器上安装, 会提示联系管理员安装】
同时安装findbug插件,用于任务跟踪
当状态显示为install pending时,说明插件安装完成,点击restart server即可生效
整合Sonar和gitlab
安装Gitlab-runner,获取gitlab-Token
进入gitlab后,选择runner,进行相应的Token获取。
安装gitlab-runner
# 拉取镜像 docker pull gitlab/gitlab-runner # 创建容器映射目录 mkdir -p /data/gitlab-runner/config # 创建容器并运行 docker run -d --name gitlab-runner --restart always -v /data/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner 配置gitlab-runner相应的参数(用上图中url与token): docker exec -it gitlab-runner gitlab-runner register -n --url http://git.yoyi.tv/ --registration-token DmxqxgWsoEpGynLUrGgj --executor docker --description "Docker Runner" --docker-image "sonarsource/sonar-scanner-cli:latest" --docker-volumes /var/run/docker.sock:/var/run/docker.sock 配置完成后,config下会生成配置文件
让我们来个git项目测试吧
手动添加项目
是否需要集成自己喜欢的CI,使用gitlab进行持续集成和持续部署–》选择代码编码–》按照提示在git中创建文件sonar-project.properties .gitlab-ci.yml 与CI/CD
创建完成后请在页面等待; 让我们上传下git的代码进行debug吧
等待CI/CD进行
查看sonaroube手动创建的项目
可以点进各bugs等中查询详情,这样就完成了;