记录两种部署方式:zip安装包部署、docker-compose;并且安装PDF导出报告插件;
# SonarQube
SonarQube ® 是一种自动代码审查工具,用于检测代码中的错误、漏洞和代码异味。它可以与您现有的工作流程集成,以实现跨项目分支和拉取请求的持续代码检查。
# 1. 前置条件
- 由于用到elasticsearch 所以需要java环境
- 数据库选择mysql(sonarQube7.9以上不再支持MySQL)
- 版本如下:
[root@summer home]# mysql -V
mysql Ver 14.14 Distrib 5.7.37, for Linux (x86_64) using EditLine wrapper
[root@summer home]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
[root@summer home]#
# 2. 安装
# 2.1 创建sonar用户
- SonarQube不能使用root用户启动,需创建普通用户
[root@summer opt]# useradd sonar //新建普通用户,es必须以普通身份启动
[root@summer opt]# passwd sonar
Changing password for user sonar.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@summer opt]#
## 密码:hadoop
# 2.2 下载解压并授权
代码语言:javascript复制[root@summer opt]# ll
total 200916
-rw-r--r--. 1 root root 205736714 Jan 25 18:57 sonarqube-7.8.zip
[root@summer opt]# unzip sonarqube-7.8.zip
...
...
[root@summer opt]# chmod -R 777 /opt/sonarqube-7.8/
[root@summer opt]# ll
total 200916
drwxrwxrwx. 11 root root 141 Jun 17 2019 sonarqube-7.8
-rw-r--r--. 1 root root 205736714 Jan 25 18:57 sonarqube-7.8.zip
[root@summer opt]#
# 2.3 配置要求
- 编辑sonarqube配置文件
[root@summer conf]# cat sonar.properties
sonar.jdbc.url=jdbc:mysql://127.0.0.1:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.jdbc.username=root
sonar.jdbc.password=Root@sswo4d
sonar.sorceEncoding=UTF-8
# Property values can:
- 新建数据库
[root@summer conf]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 44
Server version: 5.7.37 MySQL Community Server (GPL)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
mysql> create database sonar default charset utf8;
Query OK, 1 row affected (0.02 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> q
Bye
[root@summer conf]#
- 系统配置
[root@summer conf]# sysctl -w vm.max_map_count=262144
vm.max_map_count = 262144
[root@summer conf]# sysctl -w fs.file-max=65536
fs.file-max = 65536
[root@summer conf]# ulimit -n 65536
[root@summer conf]# ulimit -u 2048
## /etc/security/limits.conf 增加
* hard nofile 65536
* soft nofile 65536
* soft nproc 4096
* hard nproc 4096
sonar soft memlock unlimited
sonar hard memlock unlimited
[root@summer logs]# sysctl -p
# 3. 使用方式
# 3.1 启动服务
代码语言:javascript复制[root@summer sonarqube-7.8]# su sonar ./bin/linux-x86-64/sonar.sh start
Starting SonarQube...
Started SonarQube.
# 3.2 查看服务
代码语言:javascript复制[root@summer sonarqube-7.8]# su sonar ./bin/linux-x86-64/sonar.sh status
SonarQube is running (87022).
[root@summer sonarqube-7.8]# ss -anlt | grep 9000
LISTEN 0 25 [::]:9000 [::]:*
- 浏览器访问
http://ip:9000
- 默认账号密码(admin/admin)
# 3.3 日志文件
代码语言:javascript复制[root@summer logs]# ll
total 176
-rw-r--r--. 1 sonar sonar 14328 Jan 25 19:54 access.log
-rw-r--r--. 1 sonar sonar 555 Jan 25 19:54 ce.log
-rw-r--r--. 1 sonar sonar 15102 Jan 25 19:54 es.log
-rwxrwxrwx. 1 root root 88 Jun 17 2019 README.txt
-rw-r--r--. 1 sonar sonar 6297 Jan 25 19:54 sonar.log
-rw-r--r--. 1 sonar sonar 113994 Jan 25 19:54 web.log
[root@summer logs]# pwd
/opt/sonarqube-7.8/logs
# 4. 本地项目扫描
搭配SonarScanner使用
# 4.1 下载SonarScanner并解压
- 如图解压至
C:sonar-scanner
# 4.2 配置SonarScanner
- 修改SonarScanner配置文件
- 新建系统变量:SONAR_RUNNNER_HOME=Sonar Scanner根目录
- 修改系统变量path:新增%SONAR_RUNNNER_HOME%bin
- 打开cmd面板,输入
sonar-scanner -version
,出现下图,则表示环境变量设置成功:
# 4.3 审核项目代码
- 在需要审核的项目根目录下新建sonar-project.properties文件,内容如下:
- 打开cmd面板,进入项目根目录下,然后输入“sonar-scanner”命令,执行代码分析
# 4.4 查看审核结果
- 打开http://IP:9000 (SonarQube服务器),输入账号密码,即可查看代码分析结果。
# 5. docker-compoes安装SonarQube8.9.1
- 因为需要集成jenkins、并且不影响其他服务,所以使用docker方式部署;导出PDF汇总文件,目前该插件只适配到SonarQube8.9.1
[root@summer ~]# cd docker-sonarqube/
[root@summer docker-sonarqube]# cat docker-compose.yml
version: '2'
services:
postgresql:
image: docker.io/bitnami/postgresql:13
volumes:
- 'postgresql_data:/bitnami/postgresql'
environment:
# ALLOW_EMPTY_PASSWORD is recommended only for development.
- ALLOW_EMPTY_PASSWORD=yes
- POSTGRESQL_USERNAME=bn_sonarqube
- POSTGRESQL_DATABASE=bitnami_sonarqube
sonarqube:
image: docker.io/bitnami/sonarqube:8.9.1
ports:
- '80:9000'
volumes:
- 'sonarqube_data:/bitnami/sonarqube'
depends_on:
- postgresql
environment:
# ALLOW_EMPTY_PASSWORD is recommended only for development.
- ALLOW_EMPTY_PASSWORD=yes
- SONARQUBE_DATABASE_HOST=postgresql
- SONARQUBE_DATABASE_PORT_NUMBER=5432
- SONARQUBE_DATABASE_USER=bn_sonarqube
- SONARQUBE_DATABASE_NAME=bitnami_sonarqube
volumes:
postgresql_data:
driver: local
sonarqube_data:
driver: local
# 5.1 参数修改
代码语言:javascript复制vim /etc/sysctl.conf
# 文件最后加上如下内容
vm.max_map_count = 262144
[root@summer ~]# sysctl -p
vm.max_map_count = 262144
# 5.2 日志查看
代码语言:javascript复制[root@summer docker-sonarqube]# docker-compose logs sonarqube
Attaching to docker-sonarqube_sonarqube_1
sonarqube_1 | sonarqube 07:04:27.46
sonarqube_1 | sonarqube 07:04:27.46 Welcome to the Bitnami sonarqube container
sonarqube_1 | sonarqube 07:04:27.46 Subscribe to project updates by watching https://github.com/bitnami/bitnami-docker-sonarqube
sonarqube_1 | sonarqube 07:04:27.46 Submit issues and feature requests at https://github.com/bitnami/bitnami-docker-sonarqube/issues
sonarqube_1 | sonarqube 07:04:27.46
sonarqube_1 | sonarqube 07:04:27.48 INFO ==> Validating settings in POSTGRESQL_CLIENT_* env vars
sonarqube_1 | sonarqube 07:04:27.54 WARN ==> You set the environment variable ALLOW_EMPTY_PASSWORD=yes. For safety reasons, do not use this flag in a production environment.
sonarqube_1 | sonarqube 07:04:27.54 INFO ==> Creating SonarQube configuration
sonarqube_1 | sonarqube 07:04:27.59 INFO ==> Trying to connect to the database server
sonarqube_1 | sonarqube 07:04:32.62 INFO ==> Ensuring SonarQube directories exist
sonarqube_1 | sonarqube 07:04:32.66 INFO ==> Starting SonarQube in background
sonarqube_1 | sonarqube 07:04:33.20 INFO ==> Waiting for SonarQube to start...
sonarqube_1 | sonarqube 07:05:20.33 INFO ==> Configuring user credentials
sonarqube_1 | sonarqube 07:05:21.97 INFO ==> Stopping SonarQube
sonarqube_1 | sonarqube 07:05:24.05 INFO ==> Persisting SonarQube installation
sonarqube_1 | sonarqube 07:05:24.35 INFO ==> ** SonarQube setup finished! **
sonarqube_1 |
sonarqube_1 | sonarqube 07:05:24.40 INFO ==> ** Starting SonarQube **
sonarqube_1 | Running SonarQube...
# 5.3 PDF插件部署
插件下载地址
代码语言:javascript复制[root@summer docker-sonarqube]# ll
total 12876
-rw-r--r-- 1 root root 902 May 6 10:43 docker-compose.yml
-rw-r--r-- 1 root root 13175122 May 6 10:18 sonar-pdfreport-plugin-4.0.0.jar
-rw-r--r-- 1 root root 206 May 6 14:22 sonar-project.properties
- cp到容器中,然后重启Sonarqube服务即可
docker cp sonar-pdfreport-plugin-4.0.0.jar de:/opt/bitnami/sonarqube/extensions/plugins/
sonar.pdf.username
、sonar.pdf.password
这些参数的值需要提前在sonar平台配置好
# 6. docker安装sonar-scanner
- 官网示例
docker run
--rm
-e SONAR_HOST_URL="http://${SONARQUBE_URL}"
-e SONAR_LOGIN="myAuthenticationToken"
-v "${YOUR_REPO}:/usr/src"
sonarsource/sonar-scanner-cli
- 这里使用jenkins的工作目录
docker run
--rm
-e SONAR_HOST_URL="http://192.168.0.X.X"
-e SONAR_LOGIN="8b335b774477e6bcb023a2c4ca235efc9a308c22"
-v "/data/code/jenkins_home/workspace/SonarQube-summer:/usr/src"
sonarsource/sonar-scanner-cli
- SONAR_LOGIN:是创建Sonarqube工程时生成的key
- 在项目根目录创建
sonar-project.properties
文件
cat sonar-project.properties
sonar.host.url=http://192.168.X.X
sonar.login=8b335b774477e6bcb023a2c4ca235efc9a308c22
sonar.projectKey=summer
sonar.sources=.
sonar.pdf.password=bitnami
sonar.pdf.username=admin
sonar.pdf.skip=false
sonar.pdf.password
这些参数的值需要提前在平台配置好
# 7. 集成jenkins
通过 Jenkins 更新中心安装 SonarScanner for Jenkins。配置您的 SonarQube 服务器:
以管理员身份登录 Jenkins,然后转到Manage Jenkins > Configure System。 向下滚动到 SonarQube 配置部分,单击Add SonarQube,然后添加系统提示您输入的值。 服务器身份验证令牌应创建为“秘密文本”凭据。
- 改:
- 拉取最新的git代码
- 执行shell:
docker run
--rm
-e SONAR_HOST_URL="http://192.168.X.X"
-e SONAR_LOGIN="8b335b774477e6bcb023a2c4ca235efc9a308c22"
-v "/data/code/jenkins_home/workspace/SonarQube-summer:/usr/src"
sonarsource/sonar-scanner-cli
- pdf文件获取路径:
root@summer docker-sonarqube]# docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------
docker-sonarqube_postgresql_1 /opt/bitnami/scripts/postg ... Up 5432/tcp
docker-sonarqube_sonarqube_1 /opt/bitnami/scripts/sonar ... Up 0.0.0.0:80->9000/tcp
[root@summer docker-sonarqube]# docker exec -it docker-sonarqube_sonarqube_1 /bin/bash
sonarqube@de59eefc0110:/$ cd /opt/bitnami/sonarqube/pdf-files/
sonarqube@de59eefc0110:/opt/bitnami/sonarqube/pdf-files$ ls
summer.pdf