SonarQube是一个用于静态代码分析的开源平台,它可以帮助开发人员和团队检测代码质量问题,包括代码复杂性、重复代码、潜在的安全问题等。SonarQube提供了一系列的插件和工具,可以与各种不同的开发语言和开发工具进行集成,如Java、C#、Python、JavaScript等,这使得它成为大型软件项目开发中必不可少的工具之一。
SonarQube可以通过Web界面对代码进行可视化展示和分析,同时还支持构建工具集成、持续集成和持续交付,使得开发团队可以在开发过程中更早地发现和解决代码质量问题,从而提高代码质量、提高开发效率。
实际项目应用开发过程中,单独为 SpringCloud 工程部署一台运维服务器,不要安装在 Kubernetes 服务器上,同样按照上面的步骤安装 docker 和 docker-compose,然后使用 docker-compose 构建 Jenkins 和 Sonar。
1. 创建宿主机挂载目录并赋权
mkdir -p /data/docker/ci/nexus /data/docker/ci/jenkins/lib /data/docker/ci/jenkins/home /data/docker/ci/sonarqube /data/docker/ci/postgresql
chmod -R 777 /data/docker/ci/nexus /data/docker/ci/jenkins/lib /data/docker/ci/jenkins/home /data/docker/ci/sonarqube /data/docker/ci/postgresql
2. 新建 Jenkins+Sonar 安装脚本 jenkins-compose.yml 脚本,这里的 Jenkins 使用的是 Docker 官方推荐的镜像 jenkinsci/blueocean,在实际使用中发现,即使不修改插件下载地址,也可以下载插件,所以比较推荐这个镜像。
version: '3'
networks:
prodnetwork:
driver: bridge
services:
sonardb:
image: postgres:12.2
restart: always
ports:
- "5433:5432"
networks:
- prodnetwork
volumes:
- /data/docker/ci/postgresql:/var/lib/postgresql
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar
sonar:
image: sonarqube:8.2-community
restart: always
ports:
- "19000:9000"
- "19092:9092"
networks:
- prodnetwork
depends_on:
- sonardb
volumes:
- /data/docker/ci/sonarqube/conf:/opt/sonarqube/conf
- /data/docker/ci/sonarqube/data:/opt/sonarqube/data
- /data/docker/ci/sonarqube/logs:/opt/sonarqube/logs
- /data/docker/ci/sonarqube/extension:/opt/sonarqube/extensions
- /data/docker/ci/sonarqube/bundled-plugins:/opt/sonarqube/lib/bundled-plugins
environment:
- TZ=Asia/Shanghai
- SONARQUBE_JDBC_URL=jdbc:postgresql://sonardb:5432/sonar
- SONARQUBE_JDBC_USERNAME=sonar
- SONARQUBE_JDBC_PASSWORD=sonar
nexus:
image: sonatype/nexus3
restart: always
ports:
- "18081:8081"
networks:
- prodnetwork
volumes:
- /data/docker/ci/nexus:/nexus-data
jenkins:
image: jenkinsci/blueocean
user: root
restart: always
ports:
- "18080:8080"
networks:
- prodnetwork
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /etc/localtime:/etc/localtime:ro
- $HOME/.ssh:/root/.ssh
- /data/docker/ci/jenkins/lib:/var/lib/jenkins/
- /usr/bin/docker:/usr/bin/docker
- /data/docker/ci/jenkins/home:/var/jenkins_home
depends_on:
- nexus
- sonar
environment:
- NEXUS_PORT=8081
- SONAR_PORT=9000
- SONAR_DB_PORT=5432
cap_add:
- ALL
3. 在 jenkins-compose.yml 文件所在目录下执行安装启动命令
docker-compose -f jenkins-compose.yml up -d
安装成功后,展示以下信息
[+] Running 5/5
⠿ Network root_prodnetwork Created 0.0s
⠿ Container root-sonardb-1 Started 1.0s
⠿ Container root-nexus-1 Started 1.0s
⠿ Container root-sonar-1 Started 2.1s
⠿ Container root-jenkins-1 Started 4.2s
4. 查看服务的启动情况
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
52779025a83e jenkins/jenkins:lts "/sbin/tini -- /usr/…" 4 minutes ago Up 3 minutes 50000/tcp, 0.0.0.0:18080->8080/tcp, :::18080->8080/tcp root-jenkins-1
2f5fbc25de58 sonarqube:8.2-community "./bin/run.sh" 4 minutes ago Restarting (0) 21 seconds ago root-sonar-1
4248a8ba71d8 sonatype/nexus3 "sh -c ${SONATYPE_DI…" 4 minutes ago Up 4 minutes 0.0.0.0:18081->8081/tcp, :::18081->8081/tcp root-nexus-1
719623c4206b postgres:12.2 "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 0.0.0.0:5433->5432/tcp, :::5433->5432/tcp root-sonardb-1
2b6852a57cc2 goharbor/harbor-jobservice:v2.2.4 "/harbor/entrypoint.…" 5 days ago Up 29 seconds (health: starting) harbor-jobservice
ebf2dea994fb goharbor/nginx-photon:v2.2.4 "nginx -g 'daemon of…" 5 days ago Restarting (1) 46 seconds ago nginx
adfaa287f23b goharbor/harbor-registryctl:v2.2.4 "/home/harbor/start.…" 5 days ago Up 7 minutes (healthy) registryctl
8e5bcca3aaa1 goharbor/harbor-db:v2.2.4 "/docker-entrypoint.…" 5 days ago Up 7 minutes (healthy) harbor-db
ebe845e020dc goharbor/harbor-portal:v2.2.4 "nginx -g 'daemon of…" 5 days ago Up 7 minutes (healthy) harbor-portal
68263dea2cfc goharbor/harbor-log:v2.2.4 "/bin/sh -c /usr/loc…" 5 days ago Up 7 minutes (healthy) 127.0.0.1:1514->10514/tcp harbor-log
我们发现 jenkins 端口映射到了 18081 ,但是 sonarqube 没有启动,查看日志发现 sonarqube 文件夹没有权限访问,日志上显示容器目录的权限不够,但实际是宿主机的权限不够,这里需要给宿主机赋予权限
chmod 777 /data/docker/ci/sonarqube/logs
chmod 777 /data/docker/ci/sonarqube/bundled-plugins
chmod 777 /data/docker/ci/sonarqube/conf
chmod 777 /data/docker/ci/sonarqube/data
chmod 777 /data/docker/ci/sonarqube/extension
执行重启命令
docker-compose -f jenkins-compose.yml restart
再次使用命令查看服务启动情况,就可以看到 jenkins 映射到 18081,sonarqube 映射到 19000 端口,我们在浏览器就可以访问 jenkins 和 sonarqube 的后台界面了
5. Jenkins 登录初始化
从 Jenkins 的登录界面提示可以知道,默认密码路径为/var/jenkins_home/secrets/initialAdminPassword,这里显示的事 Docker 容器内部的路径,实际对应我们上面服务器设置的路径为/data/docker/ci/jenkins/home/secrets/initialAdminPassword ,我们打开这个文件并输入密码就可以进入 Jenkins 管理界面
6. 选择安装推荐插件,安装完成之后,根据提示进行下一步操作,直到进入管理后台界面
7. 默认配置
- sonarqube 默认用户名密码: admin/admin
- 卸载命令:docker-compose -f jenkins-compose.yml down -v
使用SonarQube可以带来以下好处:
-
提高代码质量:SonarQube可以对代码进行静态分析,检查代码质量及其遵循的代码规范,从而帮助开发人员提高代码质量。
-
减少代码缺陷:SonarQube能够检测出代码中可能存在的漏洞和缺陷,从而帮助开发人员及早发现并解决问题。
-
加强代码安全:SonarQube能够对代码安全进行检查,帮助开发人员避免代码中存在的安全漏洞。
-
提高团队协作:SonarQube能够对团队成员进行代码质量评估和监控,从而提高团队整体的协作效率和工作质量。
-
支持多种语言:SonarQube支持多种编程语言,包括Java、C#、Python等,可以满足不同项目的需求。
总的来说,使用SonarQube可以帮助开发团队提高代码质量、减少缺陷和漏洞,并提高团队协作效率。