栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

SonarQube + Gitlab-CI 实现自动化代码质量检测

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SonarQube + Gitlab-CI 实现自动化代码质量检测

1. Sornaqube安装与配置 1.1 简介

SonarQube® is an automatic code review tool to detect bugs, vulnerabilities, and code smells in your code. It can integrate with your existing workflow to enable continuous code inspection across your project branches and pull requests.(SonarQube documentation | SonarQube Docs)

SonarQube®是一个自动代码检查工具,可以检测代码中的bug、漏洞和代码气味。它可以与您现有的工作流集成,以支持跨项目分支和拉取请求的连续代码检查。

1.2 安装

(1)二进制方式(zip包)

下载地址:

Download | SonarQubeGet the latest LTS and version of SonarQube the leading product for Code Quality and Security from the official download page.https://www.sonarqube.org/downloads/将下载下来的zip包(如sonarqube-9.3.0.51899.zip)解压到指定的路径下,根据需要可以修改conf/sonar.properties配置文件。

我这里只修改了数据库配置,其他默认。

根据自己的系统平台,在bin目录下选择对应的启动命令进行启动即可(如bin/linux-x86-64/sonar.sh)。

(2)docker方式

由于sonarqube内嵌了elasticsearch,对宿主机有如下要求:

sysctl -w vm.max_map_count=524288
sysctl -w fs.file-max=131072
ulimit -n 131072
ulimit -u 8192

先安装数据库(注意:要给数据卷授予读写执行的权限)

 docker run -d --restart=always 
    --privileged 
    --name postgres 
    -p 5432:5432 
    -e TZ=Asia/Shanghai 
    -e POSTGRES_USER=postgres 
    -e POSTGRES_PASSWORD=postgres 
    -e POSTGRES_DB=sonarqube 
    -v /opt/postgresql/data:/var/lib/postgresql/data 
    postgres:14.2

再安装sonarqube(通过--link方式访问postgresql)

docker run -d 
    --restart=always 
    --link=postgres 
    --privileged 
    --name sonarqube 
    -p 9001:9000 
    -e SONAR_JDBC_URL=jdbc:postgresql://postgres:5432/sonarqube?currentSchema=public 
    -e SONAR_JDBC_USERNAME=postgres 
    -e SONAR_JDBC_PASSWORD=postgres 
    -v /opt/sonarqube/data:/opt/sonarqube/data 
    -v /opt/sonarqube/extensions:/opt/sonarqube/extensions 
    -v /opt/sonarqube/logs:/opt/sonarqube/logs 
    sonarqube:9.3.0-community

(3)docker-compose方式

启动:docker-compose -f docker-compose.yml up -d

停止:docker-compose -f docker-compose.yml down

# docker-compose.yml
version: '3.1'
services:
  postgres:
    image: postgres:14.2
    restart: always
    container_name: postgres
    ports:
      - 5432:5432
    volumes:
      - /opt/sonarqube/postgres/postgresql:/var/lib/postgresql
      - /opt/sonarqube/postgres/data:/var/lib/postgresql/data
    environment:
      TZ: Asia/Shanghai
      POSTGRES_USER: sonarqube
      POSTGRES_PASSWORD: sonarqube
      POSTGRES_DB: sonarqube

  sonarqube:
    image: sonarqube:9.3.0-community
    container_name: sonarqube
    privileged: true
    depends_on:
      - postgres
    volumes:
      - /opt/sonarqube/extensions:/opt/sonarqube/extensions
      - /opt/sonarqube/logs:/opt/sonarqube/logs
      - /opt/sonarqube/data:/opt/sonarqube/data
      - /opt/sonarqube/conf:/opt/sonarqube/conf
    ports:
      - 9001:9000
    command:
      # 内存设置
      - -Dsonar.ce.javaOpts=-Xmx2048m
      - -Dsonar.web.javaOpts=-Xmx2048m
    environment:
      SONARQUBE_JDBC_USERNAME: sonarqube
      SONARQUBE_JDBC_PASSWORD: sonarqube
      SONARQUBE_JDBC_URL: jdbc:postgresql://postgres:5432/sonarqube
1.3 配置

默认账号密码是admin/admin。

1.3.1 安装插件

从“Administration -> Marketplace”打开插件界面,搜索指定的插件,点击插件列表右侧的“install”安装插件。

也可以从插件官网上下载,然后拷贝到“{SONARQUBE_HOME}/extensions/plugins”目录下。插件安装完毕后如下图。

插件列表:

 插件目录:

1.3.2 质量配置

每个语言都有内置的质量分析规则集合,如果项目没特别指定配置,用默认的配置。当然我们也可以给对应的语言,选择我们想要的规则,配置新的规则集合。

这里我们给Java语言创建一个新的名称为“CheckAll”的配置。

点击“质量配置->创建”,在新配置窗口,输入配置名称,如:CheckAll(多个规则汇聚与此)。选择语言,如:Java。

刚创建的“CheckAll”配置刚开始规则是空的,需要激活相应的规则到该配置下。

激活配置。

选择(或搜索)要到导入到CheckAll配置的其他规则,如Alibaba-P3C,点击“批量修改”->“激活”,在弹出的对话框中下拉选择“CheckAll”,点击“应用”后,Alibaba-P3C的规则就加入到CheckAll配置中。

Alibaba-P3C规则集已经添加到我们新创建的CheckAll配置中(共56条规则)。

同样的方式,将FindBugs和内置的Sonar Way相关的规则也添加到CheckAll配置下(共970条规则)。

要使用CheckAll规则,把它设置为默认的配置即可。

2. 质量分析 2.1 手工执行分析

点击“项目”->"手工",在“手工设置”页面中输入项目的名称和标识,点击“设置”。(提示:“项目标识”不需要和具体的项目名称保持一致,该“项目标识”的作用主要是用于关联项目分析结果的)

选择“手工”或“其他CI”

 输入令牌名称,如“sonar-test-project”,创建令牌。

令牌创建后,第二步根据项目的构建方式选择对应的技术,同时会生成相应的质量分析命令。我的测试项目是基于Maven构建的,所以选择Maven,其实该命令最终是由“  sonar-maven-plugin:3.9.1.2184:sonar”插件来实现质量分析扫描的。命令的参数只有几个必要的分析参数,更多分析参数请参考官方文档:Analysis Parameters | SonarQube Docs

这里我增加了两个属性,其中“-Dsonar.branch.name=dev”是通过第三方插件“Community Branch Plugin”实现的,sonarqube社区版不支持分支pull请求。

mvn clean verify sonar:sonar 
  -Dsonar.projectKey=sonar-test-project 
  -Dsonar.host.url=http://192.168.1.6:9001 
  -Dsonar.login=c9762ecddd4d3ea64d91bd4d4e86fa40ea8c2413 
  -Dmaven.test.skip=true 
  -Dsonar.branch.name=dev

 然后在项目源码的根目录(pom.xml所在的目录)执行上面的命令即可。

提示:projectKey,即项目标识,不需要和具体的项目名称保持一致,该“项目标识”的作用主要是用于关联项目分析结果的。其实该命令可以在任意基于Maven构建的项目下执行,只是分析结果“张冠李戴”了而已。

 分析结果如下:

2.2 通过Gitlab-CI自动化执行分析 

[未完待续]

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/757085.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号