安装SonarQube

2022-09-16 12:18:06 浏览数 (1)

记录两种部署方式:zip安装包部署、docker-compose;并且安装PDF导出报告插件;

# SonarQube

SonarQube ® 是一种自动代码审查工具,用于检测代码中的错误、漏洞和代码异味。它可以与您现有的工作流程集成,以实现跨项目分支和拉取请求的持续代码检查。

# 1. 前置条件

  • 由于用到elasticsearch 所以需要java环境
  • 数据库选择mysql(sonarQube7.9以上不再支持MySQL)
  • 版本如下:
代码语言:javascript复制
[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用户启动,需创建普通用户
代码语言:javascript复制
[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配置文件
代码语言:javascript复制
[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:

  • 新建数据库
代码语言:javascript复制
[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]#

  • 系统配置
代码语言:javascript复制
[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
代码语言:javascript复制
[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服务即可
代码语言:javascript复制
docker cp sonar-pdfreport-plugin-4.0.0.jar de:/opt/bitnami/sonarqube/extensions/plugins/
  • sonar.pdf.usernamesonar.pdf.password这些参数的值需要提前在sonar平台配置好

# 6. docker安装sonar-scanner

  • 官网示例
代码语言:javascript复制
docker run 
    --rm 
    -e SONAR_HOST_URL="http://${SONARQUBE_URL}" 
    -e SONAR_LOGIN="myAuthenticationToken" 
    -v "${YOUR_REPO}:/usr/src" 
    sonarsource/sonar-scanner-cli

  • 这里使用jenkins的工作目录
代码语言:javascript复制
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文件
代码语言:javascript复制
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,然后添加系统提示您输入的值。 服务器身份验证令牌应创建为“秘密文本”凭据。

- 改:

  1. 拉取最新的git代码
  2. 执行shell:
代码语言:javascript复制
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

  1. pdf文件获取路径:
代码语言:javascript复制
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

0 人点赞