SonarQube:CentOS7 使用 Docker 安装 SonarQube 后,集成 MySQL 和 Sonar-Scanner

简介:

  • 部署数据库: 可以将 Sonar 的配置信息的导入数据库,便于以后的调用。

  • 挂载目录: 是为了将 Sonar 的扫描分析导出备份。

    不挂载目录,Sonar 容器死掉后,扫描分析也将消失。

本文参考: https://blog.csdn.net/liudong9109/article/details/88897559 (条理清晰)
http://www.cnblogs.com/freestudy/articles/10277783.html (排版差、错误多)


环境:

  • CentOS Linux release 7.6.1810 (Core)

  • Docker version 18.09.3, build 774a1f4

  • Jenkins 2.177 (2019-05-12)



创建时间:2019/5/26 15:51:31 

创建人:于子源

修改记录:修改人+修改时间+修改说明(多人修改时,增加多条)

当前版本:version 1.0.0

部署 MySQL

  1. 下载 MySQL5.7 镜像

    docker pull mysql:5.7

  2. 启动 MySQL:

    docker run \
    	-d \
    	-p 3307:3306 \
    	--name mysql \
    	-v /data/mysql/conf:/etc/mysql/conf.d \
    	-v /data/mysql/logs:/logs \
    	-v /data/mysql/data:/var/lib/mysql \
    	-e MYSQL_ROOT_PASSWORD=123456 \
    	mysql:5.7
    
    • -d : 后台运行容器,并返回容器 ID

    • -p 3307:3306 : 将容器的 3307 端口映射到主机的 3306 端口

    • –name mysql : 命名为 mysql

    • -v /data/mysql/conf:/etc/mysql/conf.d : 将本机 /data/mysql/conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf

    • -v /data/mysql/logs:/logs : 将本机 /data/mysql/logs 目录挂载到容器的 /logs

    • -v /data/mysql/data:/var/lib/mysql : 将本机 /data/mysql/data 目录挂载到容器的 /var/lib/mysql

    • -e MYSQL_ROOT_PASSWORD=123456 : 初始化 root 用户,密码设置为 123456

    • mysql:5.7 :基于镜像的版本为 MySQL:5.7

  3. 进入 MySQL 容器:mysql

    docker exec -it mysql bash

    1. 登录 MySQL

      mysql -u root -p

      输入密码:123456

    2. 创建 Sonar 数据库

      create database sonar;

    3. 添加远程登录用户:sonar ,并授予权限。

      CREATE USER 'sonar'@'%' IDENTIFIED WITH mysql_native_password BY 'sonar';

      GRANT ALL PRIVILEGES ON *.* TO 'sonar'@'%';

    4. 退出 MySQL

      exit

  4. 退出 MySQL 容器:mysql

    exit

启动 Sonar

  1. 在 /data 目录下创建 sonarqube/

    mkdir /data/sonarqube

  2. 创建一个简单的 sonarqube 容器,目的是:取出里面的配置文件。为之后创建 sonarqube 时,可以挂载目录。

    docker run -d --name sonartest sonarqube:7.4-community

  3. 进入容器(a0 是容器 ID)

    docker exec -it a0 bash

  4. 使用 scp 命令,将重要文件复制到本机的 /data/sonarqube/ 下

    scp -r conf/ data/ extensions/ logs/ root@10.9.40.121:/data/sonarqube

    命令解释: 将 conf/ data/ extensions/ logs/ 复制到 /data/sonarqube 目录下

    scp 是 SSH cp。用户为 root,主机号为 10.9.40.121。

    输入 yes,输入 root 的密码

  5. 退出并删除容器

    exit

    docker stop a0

    docker rm a0

  6. 递归修改文件夹权限

    chmod -R 777 /data/sonarqube/

  7. 启动 Sonar

    下述代码在使用的时候,记得修改 IP。

    启动命令:

     docker run \
     -d \
     --name sonarqube \
     -p 9000:9000 \
     -p 9092:9092 \
     --link=mysql:mysql \
     -v /data/sonarqube/logs:/opt/sonarqube/logs \
     -v /data/sonarqube/conf:/opt/sonarqube/conf \
     -v /data/sonarqube/data:/opt/sonarqube/data \
     -v /data/sonarqube/extensions:/opt/sonarqube/extensions \
     -e SONARQUBE_JDBC_USERNAME=sonar \
     -e SONARQUBE_JDBC_PASSWORD=sonar \
     -e SONARQUBE_JDBC_URL="jdbc:mysql://10.9.40.121:3307/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false" \
     sonarqube:7.4-community
    

    参数介绍:

    • -d : 后台运行容器,并返回容器 ID

    • –name sonarqube : 命名为 sonarqube

    • -p 9000:9000 : 将本机的 9000 端口,映射到容器的 9000 端口

    • -p 9092:9092 : 将本机的 9002 端口,映射到容器的 9002 端口

    • –link=mysql:mysql : 是指和 mysql 容器连接通讯

    • -v /data/sonarqube/logs:/opt/sonarqube/logs : 将本机 /data/sonarqube/logs 挂载到容器的 /opt/sonarqube/logs

    • -v /data/sonarqube/conf:/opt/sonarqube/conf : 将本机 /data/sonarqube/conf 挂载到容器的 /opt/sonarqube/conf

    • -v /data/sonarqube/data:/opt/sonarqube/data : 将本机 /data/sonarqube/data 挂载到容器的 /opt/sonarqube/data

    • -v /data/sonarqube/extensions:/opt/sonarqube/extensions : 将本机 /data/sonarqube/extensions 挂载到容器的 /opt/sonarqube/extensions

    • -e SONARQUBE_JDBC_USERNAME=sonar : Sonar 使用 sonar 用户连接 MySQL

    • -e SONARQUBE_JDBC_PASSWORD=sonar : MySQL 中 sonar 用户的密码

    • -e SONARQUBE_JDBC_URL=“jdbc:mysql://10.9.40.121:3307/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false” : MySQL 的 URL

    • sonarqube:7.4-community :基于镜像的版本为 sonarqube:7.4-community

  8. 启动 Sonar 可能要持续 4min,可以通过查看 logs 日志和正在运行的容器,来判断容器是否启动成功。

    docker logs c 这里的 c 是容器 ID

    在这里插入图片描述

    docker ps -a

部署 Sonar-Scanner

  1. 下载

    wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip

  2. 解压

    unzip sonar-scanner-cli-3.3.0.1492-linux.zip

  3. 移到标准位置

    mv sonar-scanner-3.3.0.1492-linux/ /usr/local/

  4. 修改配置文件

    文件目录:/usr/local/sonar-scanner-3.3.0.1492-linux/conf

    vi /usr/local/sonar-scanner-3.3.0.1492-linux/conf/sonar-scanner.properties

    在最后面,写入以下内容:(注意:下述代码有两个需要改 IP 的地方。)

     #----- Default SonarQube server
     sonar.host.url=http://10.9.40.121:9000
     
     #----- Default source code encoding
     sonar.sourceEncoding=UTF-8
     
     #----- 数据库用户名
     sonar.jdbc.username=sonar
     #----- 数据库密码
     sonar.jdbc.password=sonar
     #----- 数据库连接地址
     sonar.jdbc.url=jdbc:mysql://10.9.40.121:3307/sonar?useUnicode=true&characterEncoding=utf8
     
     #----- Sonar 用户名
     sonar.login=admin
     #----- Sonar 密码
     sonar.password=admin
    

    下面这段代码是我从其他资料上找到的,暂时还不知具体功能是什么,写在这里,日后明白了再来说明。

    sonar.jdbc.url=jdbc:mysql://10.9.40.121:3307/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

  5. 修改环境变量

    vi /etc/profile

    在末尾环境变量处增加以下内容:

     export SONAR_SCANNER_HOME=/usr/local/sonar-scanner-3.3.0.1492-linux
     export PATH=$SONAR_SCANNER_HOME/bin:$PATH
    
  6. 运行代码扫描

    找一个测试代码,121上没有啥代码,我找到 /home/yzy/javaProject01/ 下,执行下面的代码:

    mvn sonar:sonar

    这一步要下载很多文件,耐心等待。10 ~ 20 分钟都是正常的。直至出现下图,扫描完成。

    在这里插入图片描述

  7. 进入 SonarQube 查看扫描结果

    URL: http://10.9.40.121:9000
    在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐