DevOps搭建(五)-集成Sonar Qube[SonarQube,GitLab,Jenkins]

7.1 Sonar Qube介绍

Sonar Qube是一个开源的代码分析平台,支持Java、Python、PHP、JavaScript、CSS等25种以上的语言,可以检测出重复代码、代码漏洞、代码规范和安全性漏洞的问题。

Sonar Qube可以与多种软件整合进行代码扫描,比如Maven,Gradle,Git,Jenkins等,并且会将代码检测结果推送回Sonar Qube并且在系统提供的UI界面上显示出来

Sonar Qube的UI界面
image-20211129190039986

7.2 Sonar Qube环境搭建

7.2.1 Sonar Qube安装

Sonar Qube在7.9版本中已经放弃了对MySQL的支持,并且建议在商业环境中采用PostgreSQL,那么安装Sonar Qube时需要依赖PostgreSQL。

并且这里会安装Sonar Qube的长期支持版本8.9

  • 拉取镜像

    1
    2
    docker pull postgres
    docker pull sonarqube:8.9.3-community
  • 编写docker-compoe.yml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    version: "3.1"
    services:
    db:
    image: postgres
    container_name: db
    ports:
    - 5432:5432
    networks:
    - sonarnet
    environment:
    POSTGRES_USER: sonar
    POSTGRES_PASSWORD: sonar
    sonarqube:
    image: sonarqube:8.9.3-community
    container_name: sonarqube
    depends_on:
    - db
    ports:
    - "9000:9000"
    networks:
    - sonarnet
    environment:
    SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
    SONAR_JDBC_USERNAME: sonar
    SONAR_JDBC_PASSWORD: sonar
    networks:
    sonarnet:
    driver: bridge
  • 启动容器

    1
    docker-compose up -d
  • sonarqube启动失败需要设置sysctl.conf文件信息

    设置vm.max_map_count
    image-20211207145215817
    image-20211207145342350

    并执行命令刷新

    1
    sysctl -p
  • 重新启动需要一定时间启动,可以可以查看容器日志,看到如下内容代表启动成功

    容器日志
    image-20211129191426344
  • 访问Sonar Qube首页

    登录
    image-20240724095736527
  • 还需要重新设置一次密码

    重新设置密码【这里我改成了:qingyun】
    image-20211129193824428
  • Sonar Qube首页

    Sonar Qube首页
    image-20211129194148239
7.2.2 安装中文插件
安装中文插件
image-20211129194621820

安装成功后需要重启,安装失败重新点击install重装即可。

安装成功后,会查看到重启按钮,点击即可

重启按钮
image-20211129194748765

重启后查看效果

首页效果
image-20211129194931944

7.3 Sonar Qube基本使用

Sonar Qube的使用方式很多,Maven可以整合,也可以采用sonar-scanner的方式,再查看Sonar Qube的检测效果

7.3.1 Maven实现代码检测
  • 修改Maven的settings.xml文件配置Sonar Qube信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <profile>
    <id>sonar</id>
    <activation>
    <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
    <sonar.login>admin</sonar.login>
    <sonar.password>qingyun</sonar.password>
    <sonar.host.url>http://192.168.73.151:9000</sonar.host.url>
    </properties>
    </profile>
  • 在代码位置执行命令:mvn sonar:sonar

    执行代码检测
    image-20211129195430146
  • 查看Sonar Qube界面检测结果

    Sonar Qube检测结果
    image-20211129195503762image-20240724102727602
7.3.2 Sonar-scanner实现代码检测
  • 下载Sonar-scanner:

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

    下载4.6.x版本即可,要求Linux版本

  • 解压并配置sonar服务端信息

    • 由于是zip压缩包,需要安装unzip解压插件

      1
      yum -y install unzip
    • 解压压缩包

      1
      unzip sonar-scanner-cli/sonar-scanner-cli-4.6.0.2311-linux.zip
    • 配置sonarQube服务端地址,修改conf下的sonar-scanner.properties

      配置服务端信息
      image-20211130140043382
  • 执行命令检测代码

    1
    2
    # 在项目所在目录执行以下命令
    ~/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=demo -Dsonar.projectKey=java -Dsonar.java.binaries=target/

    Ps:主要查看我的sonar-scanner执行命令的位置

    查看日志信息
    image-20211130141303457
  • 查看SonarQube界面检测结果

    检测结果
    image-20211130144608025

7.4 Jenkins集成Sonar Qube

Jenkins继承Sonar Qube实现代码扫描需要先下载整合插件

7.4.1 Jenkins安装插件
下载Sonar Qube插件
image-20211129201625561
image-20211129201607240
image-20211129202147390
7.4.2 Jenkins配置Sonar Qube
  • 开启Sonar Qube权限验证

    开启Sonar Qube权限校验
    image-20211130144850186
  • 获取Sonar Qube的令牌

    获取令牌
    image-20211129203102334
  • 配置Jenkins的Sonar Qube信息

    image-20211129203235019
    image-20211129203342171
    image-20211129203457604
7.4.3 配置Sonar-scanner
  • 将Sonar-scaner添加到Jenkins数据卷中并配置全局配置

    配置Sonar-scanner
    image-20211130153628925
  • 配置任务的Sonar-scanner

    配置任务的Sonar-scanner
    image-20211130155849143
    1
    2
    3
    4
    sonar.projectname=${JOB_NAME}
    sonar.projectKey=${JOB_NAME}
    sonar.source=./
    sonar.java.binaries=target/
7.4.4 构建任务
构建任务
image-20240724111105886
image-20240724111054600