基于 GitLab+SonarQube 搭建自动化代码检测平台

一、背景介绍

目前,成熟的代码检测工具有很多,如 SpotBugs(前身为 FindBugs)、PMD、Checkstyle 等,我们可以在本地开发环境,非常便捷地利用这些工具实现代码的扫描与检测。这看上去好像很不错,但实际上,采用这种代码检测方式,我们面临着两个问题:

  • 代码提交前需要手动运行检测工具

  • 检测结果仅对自己可见

那么,有没有什么方案可以规避这些问题呢?答案当然是有的。

我们可以基于 GitLab 和 SonarQube 搭建自动化代码检测平台,并通过该平台实现以下功能:

  • 每次提交时,自动触发 SonarQube 代码检测,产生检测报告(包含坏味道、BUG 数、覆盖率等)

  • 上述检测报告,若来源于主分支提交或合并,则发送至 SonarQube,若来源于其他分支提交,则以评论形式直接反馈至 GitLab

注:如果不知道 SonarQube 是什么,可以参考 SonarQube 官方网站

二、环境要求

本次搭建使用的操作系统为 CentOS 7,需要安装的组件如下表所示:

组件名 版本号
SonarQube 6.7
GitLab 11.1.4
GitLab-Runner 13.0.1
Maven 3.6.3

实际版本号需严格遵循表格中的版本号,避免出现兼容性问题。目前,笔者已知的兼容性问题有以下几点:

  • SonarQube 在 7.6 版本后不支持插件 sonar-gitlab-plugin,若使用 7.6 之后的版本,将无法实现 SonarQube 与 GitLab 协作(除非使用付费版)

  • GitLab 与 GitLab-Runner 的版本要考虑兼容性,否则会出现 GitLab-Runner 无法连接至 GitLab 的问题

三、安装与配置

本节将描述上述组件安装与配置的详细步骤。其中,安装方式主要有本地安装和基于 Docker 安装,因此在安装前需确保宿主机已经具备 Docker 和 Docker Compose 的环境。

3.1 SonarQube

3.1.1 SonarQube 安装

使用 Docker Compose 安装 SonarQube 很简单,只需以下几个步骤:

  • 在任意位置创建安装目录 sonar,如 /usr/local/sonar

  • 在安装目录下创建 docker-compose.yml 文件,文件内容如下:

version: '2.1'

services:
  # 使用 PostgreSQL 作为 SonarQube 的持久化方案
  # 注:由于 SonarQube 7.9 及之后的版本不支持 MySQL,因此 MySQL 不作为考虑对象
  postgres:
    image: postgres:12
    container_name: sonarqube_postgres
    privileged: true
    ports:
      - "5432:5432"
    networks:
      - sonarnet
    restart: always
    # 将 PostgreSQL 数据文件存放至宿主机
    volumes:
      - ./postgres:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: sonar
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar

  sonarqube:
    image: sonarqube:6.7
    container_name: sonarqube
    privileged: true
    ports:
      - "9000:9000"
    restart: always
    networks:
      - sonarnet
    depends_on:
      - postgres
    # 将 SonarQube 日志文件、数据文件、配置文件、扩展插件存放至宿主机
    volumes:
      - ./data:/opt/sonarqube/data
      - ./extensions:/opt/sonarqube/extensions
      - ./logs:/opt/sonarqube/logs
      - ./conf:/opt/sonarqube/conf
    # 配置 SonarQube 的数据源,本例为 PostgreSQL
    environment:
      SONARQUBE_JDBC_USERNAME: sonar
      SONARQUBE_JDBC_PASSWORD: sonar
      SONARQUBE_JDBC_URL: jdbc:postgresql://postgres:5432/sonar?useUnicode=true&characterEncoding=utf8
    # 由于 SonarQube 内部会启动 ElasticSearch,因此需要此配置
    ulimits:
      nproc: 65535
      nofile:
        soft: 65536
        hard: 
要在GitLab中配置Sonar,需要按照以下步骤进行操作: 1. 首先,确保已经在服务器上成功安装并运行了SonarQube。可以通过访问SonarQube的URL来验证其是否成功运行。 2. 进入GitLab的项目页面,并点击左侧菜单中的“Settings”选项。 3. 在“Settings”页面上,点击“CI/CD”选项卡,并找到“General pipelines settings”部分。 4. 在“General pipelines settings”部分,找到“Secret variables”子选项,并点击“Expand”按钮。 5. 点击“Add variable”按钮,输入以下变量信息: - Key:SONAR_TOKEN - Value:SonarQube中的访问令牌,用于连接GitLabSonarQube。 6. 点击“Add variable”按钮以保存配置变量。 7. 返回到GitLab项目页面,并找到代码仓库中的“.gitlab-ci.yml”文件。 8. 编辑该文件,并添加以下配置信息: ```yaml sonarqube: image: sonarsource/sonar-scanner-cli script: - sonar-scanner -Dsonar.login=$SONAR_TOKEN -Dsonar.projectKey=项目标识符 ``` 其中,“项目标识符”需要替换为你在SonarQube中创建的项目标识符。 9. 保存并提交更改。GitLab会自动触发CI/CD流水线,将代码提交到SonarQube进行代码质量分析。 10. 在GitLab的项目页面上,点击左侧菜单中的“CI/CD”选项,可以查看CI/CD流水线的执行情况。 配置完成后,GitLab将会在每次代码推送到仓库时,自动触发SonarQube执行代码质量分析,并将分析结果反馈给GitLab。这样就可以更好地管理和控制代码质量,提高项目的软件开发效率。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值