• Docker、Jenkins 结合 SonarQube 和 Sonar scanner 进行代码质量扫描


    SonarQube是一个用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误。目前支持java,C#,C/C++,Python,PL/SQL,Cobol,JavaScrip,Groovy等二十几种编程语言的代码质量管理与检 测。

    官网地址:https://www.sonarqube.org/
    在这里插入图片描述
    如果要使用 sonarQube 需要注意两点:

    • SonarQube7.9 以上版本已不再支持 mysql,不过可以使用 oracle 和 postgresql
    • SonarQube 对 jdk 也是有要求的,要求 jdk11+,所以这里需要安装 jdk11 以上的

    安装 Docker、Jenkins

    安装地址:https://blog.csdn.net/wuhuayangs/article/details/125426751?spm=1001.2014.3001.5501

    安装 Postgres

    1、安装 Postgres

    docker pull postgres
    
    • 1

    2、根据镜像创建容器

    docker run --name postgres -d -p 54321:5432 -e POSTGRES_PASSWORD=123456 postgres
    
    • 1
    • run:创建并运行一个容器
    • --name:指定创建的容器的名字
    • -e POSTGRES_PASSWORD=password:设置环境变量,指定数据库的登录口令为 password
    • -p 54321:5432:端口映射将容器的 5432 端口映射到外部机器的 54321 端口
    • -d postgres:指定使用 postgres 作为镜像

    3、进入容器

    docker exec -it postgres psql -U postgres -d postgres
    
    • 1

    4、创建数据库

    create database sonar;
    
    • 1

    5、设置 sonar 用户名和密码

    create user sonar;
    alter user sonar with password 'admin123';
    
    • 1
    • 2

    6、给 sonar 授权

    alter role sonar createdb;
    alter role sonar superuser;
    alter role sonar createrole;
    
    • 1
    • 2
    • 3

    7、更改 sonar 数据库拥有者

    alter database sonar owner to sonar;
    
    • 1

    7、 查看数据库

    \l
    
    • 1

    8、查看用户

    \du
    
    • 1

    9、退出容器

    exit
    
    • 1

    10、重启数据库

    docker restart f320aced2343(容器id)
    
    • 1

    安装 SonarQube

    1、创建目录并下载 sonar 压缩包

    mkdir -p /data/sonar
    
    • 1

    https://www.sonarqube.org/downloads/

    本文选择社区8.9.9版本:sonarqube-8.9.9.56886.zip

    2、下载成功后,解压到目录:/data/sonar,并且设置权限

    创建目录
    mkdir -p /data/sonar
    # 安装解压命令
    yum install unzip
    # 解压 zip 到 /data/sonar 目录下
    unzip sonarqube-8.9.9.56886.zip
    # 创建在/data/sonar目录下创建 sonarqube 文件夹,
    mkdir sonarqube
    # 移动 
    mv sonarqube-8.9.9.56886 sonarqube
    # 创建 sonar 用户,必须 sonar 用于启动,否则报错
    useradd sonar
    # 修改 sonar 目录及文件权限
    $ chown -R sonar. /data/sonar
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    3、修改 sonar 配置文件

    使用 sonar 用户操作

    su sonar
    # 编辑 sonar 配置文件
    /data/sonar/sonarqube/sonarqube-8.9.9.56886/conf/sonar.properties
    配置如下:
    sonar.jdbc.username=sonar
    sonar.jdbc.password=admin123
    sonar.jdbc.url=jdbc:postgresql://192.168.2.129:54321/sonar?CurrentSchema=public
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    下载 JDK11

    下载地址:https://jdk.java.net/java-se-ri/11

    # 解压
    tar -zxvf openjdk-11+28_linux-x64_bin.tar.gz
    # 拿到 jdk11 的路径,配置到 sonar 中
     /data/jdk11/jdk-11/bin
    # 修改 sonarqube 的 wrapper.conf 中的 java 配置
    vi /data/sonar/sonarqube/conf/wrapper.conf
    把 wrapper.java.command=java 改成 wrapper.java.command=/data/jdk11/jdk-11/bin/java
    # 修改 环境变量,添加 SONAR_JAVA_HOME
    vim /etc/profile
    export SONAR_JAVA_HOME=/data/jdk11/jdk-11
    source /etc/profile
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    启动 sonar

    # 使用 sonar 用户启动
    su sonar
    # 进入到 sonar 启动脚本下
    cd /data/sonar/sonarqube/sonarqube-8.9.9.56886/bin/linux-x86-64
    # 查看状态
    ./sonar.sh status 
    # 启动状态
    ./sonar.sh start
    # 停止状态
    ./sonar.sh stop
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    第一个错误:

    	at java.base/java.lang.Thread.run(Thread.java:834)
    
    ERROR: [2] bootstrap checks failed. You must address the points described in the following [2] lines before starting Elasticsearch.
    bootstrap check failure [1] of [2]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
    bootstrap check failure [2] of [2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
    ERROR: Elasticsearch did not exit normally - check the logs at /data/sonar/sonarqube/sonarqube-8.9.9.56886/logs/sonarqube.log
    2022.06.27 13:31:08 WARN  app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [es]: 78
    2022.06.27 13:31:08 INFO  app[][o.s.a.SchedulerImpl] Process[es] is stopped
    2022.06.27 13:31:08 INFO  app[][o.s.a.SchedulerImpl] SonarQube is stopped
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    编辑 vi /etc/security/limits.conf 文件,加入以下内容:

    * soft nofile 65536
    * hard nofile 65536
    
    • 1
    • 2

    编辑 vi /etc/sysctl.conf 文件,加入以下内容:

    vm.max_map_count=655360
    
    • 1

    执行如下命令,并退出当前用户重新登录

    sysctl -p
    
    • 1

    第二个错误:

    Caused by: java.lang.IllegalStateException: Can not connect to database. Please check connectivity and settings (see the properties prefixed by 'sonar.jdbc.').
    
    • 1

    这是因为数据库连接不上或者 database 找不到,检查一下配置 sonar.properties 中的配置

    浏览器访问 http://192.168.2.129:9000/,发现访问不到,这是因为防火墙需要开放 9000 端口,阿里云服务器则在安全组配置就行。

    firewall-cmd --zone=public --add-port=9000/tcp --permanent
    firewall-cmd --reload
    
    • 1
    • 2

    在这里插入图片描述

    登录默认账户:admin/admin

    在这里插入图片描述

    这里密码我改成 admin123456,还有就是 token 要记下来后面会使用到哦

    在这里插入图片描述
    SonarQube 安装后默认是英文,如果不习惯看英文,可以进行汉化,官方提供了汉化插件
    在这里插入图片描述
    点击 Install 按钮下载安装就好,这里前提是先点击 “I understand the risk” 按钮才能出来 Install 按钮,这里点击太快了没有截图。

    安装后会提示重启服务,点击重启服务
    在这里插入图片描述
    重启完重新登录就变成中文了
    在这里插入图片描述

    jenkins 集成 sonar

    1、安装 SonarQube Scanner 插件

    在这里插入图片描述
    2、添加 SonarQube 凭证

    在这里插入图片描述
    3、配置 SonarQube Sever

    在 “系统管理” => “系统设置” 中找到 SonarQube servers
    在这里插入图片描述

    4、进入“系统管理”=>“全局工具配置”中找到“SonarQube Scanner”,目录为安装SonarQube Scanner的目录。
    在这里插入图片描述

    创建构建任务

    1、创建一个任务
    在这里插入图片描述

    在这里插入图片描述
    2、我这里使用以前配置好的项目,关于配置这块大家可以看我们这一篇文章:Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)

    3、配置 sonar 扫描参数
    在这里插入图片描述

    # must be unique in a given SonarQube instance
    sonar.projectKey=web_demo_freestyle
    # this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
    sonar.projectName=web_demo_freestyle
    sonar.projectVersion=1.0
     
    # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
    # This property is optional if sonar.modules is set.
    sonar.sources=.
    sonar.exclusions=**/test/**,**/target/**
    sonar.java.source=1.8
    sonar.java.target=1.8
     
    # Encoding of the source code. Default is default system encoding
    sonar.sourceEncoding=UTF-8
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    4、点击立即构建,控制台查看日志
    在这里插入图片描述
    在这里插入图片描述
    5、如果构建成功,会在 sonarQube 中看到如下页面

    在这里插入图片描述
    6、下面我们添加一个错误重新构建项目,看看效果如何

    在这里插入图片描述
    在这里插入图片描述
    再次构建后查看 sonar 报告结果,可以看到错误被检测出来了
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    到此为止,我们把 SonarQube 给集成到了 jenkins,还有更多的功能需要大家去慢慢挖掘

  • 相关阅读:
    【附源码】计算机毕业设计JAVA疫情社区志愿者组织的资源管理平台
    【动画进阶】类 ChatGpt 多行文本打字效果
    [附源码]JAVA毕业设计高校信息资源共享平台(系统+LW)
    2022年第一界HiPChips解读
    C++ 的设计模式之 工厂方法加单例
    SpringBoot 测试实践 - 1:常用的工具
    【Push Kit】关于推送消息没有锁屏通知的问题
    大公司 Or 小公司?
    apollo 路面检测分析
    在 Linux 中查找文件的 4 种方式
  • 原文地址:https://blog.csdn.net/wuhuayangs/article/details/125552220