GitLab + SonarQube 构建代码检测平台:详细教程与实战指南

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

在现代软件开发流程中,代码质量的把控至关重要。为了实现高效、自动化的代码检测,许多团队选择搭建基于GitLab和SonarQube的代码检测平台。本文将详细介绍如何搭建这一平台,并通过实战案例展示其在项目中的应用。

基于 SonarQube 8.9 搭建,SonarQube 代码质量管理工具,本文侧重讲解 SonarQube 安装配置,GitLab、GitLab Runner 安装:参照 GitLab安装部分

安装配置 SonarQube

SonarQube是一款 widely used 代码质量管理工具,而GitLab则是一款 popular 的代码托管平台。通过将两者结合,可以实现代码的自动检测和质量管控。本文基于SonarQube 8.9版本进行搭建,该版本仅支持PostgreSQL数据库。

  1. 通过 Rancher 安装 PostgreSQL 9.6
  2. 通过 Rancher 安装 SonarQube 8.9

通过 Rancher 安装 PostgreSQL

使用Rancher安装PostgreSQL 9.6,确保数据库环境的稳定性和可靠性
设置必要的环境变量,以确保SonarQube能够正确连接到PostgreSQL数据库
配置数据卷,确保数据的持久化存储

通过 Rancher 安装 SonarQube

设置SonarQube的基础信息,包括版本号、端口号等

设置SonarQube的环境变量,确保其能够正确连接到PostgreSQL数据库

配置项目接入代码检测

Java项目配置(Maven)

  1. .gitlab-ci.yml配置
    在 .gitlab-ci.yml 文件中配置代码检测任务,确保在不同的分支上进行代码检测
stages:
  - quality
variables:
  sonar_url: "http://172.0.0.1:9000"
  sonar_token: "**********************"
# 功能分支、发布分支检测
sonar_feature_job:
  stage: quality
  script:
    - mvn --batch-mode verify sonar:sonar
      -Dsonar.host.url=$sonar_url -Dsonar.login=$sonar_token
      -Dsonar.projectKey=$CI_PROJECT_NAME
      -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA
      -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME
      -Dsonar.gitlab.project_id=$CI_PROJECT_ID
      -Dsonar.branch.name=$CI_COMMIT_REF_NAME
  only:
    - /^feat\/*/
    - /^release\/*/
  tags:
    - mavenrunner01

# 对uat进行管控
sonar_uat_job:
  stage: quality
  script:
    - mvn --batch-mode verify sonar:sonar
      -Dsonar.host.url=$sonar_url -Dsonar.login=$sonar_token
      -Dsonar.projectKey=$CI_PROJECT_NAME
      -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA
      -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME
      -Dsonar.gitlab.project_id=$CI_PROJECT_ID
      -Dsonar.branch.name=$CI_COMMIT_REF_NAME
  only:
    - uat
  tags:
    - mavenrunner02

# 对生产环境进行管控
sonar_master_job:
  stage: quality
  script:
    - mvn clean install -Dmaven.test.skip=true
    - mvn --batch-mode verify sonar:sonar
      -Dsonar.host.url=$sonar_url -Dsonar.login=$sonar_token
      -Dsonar.projectKey=$CI_PROJECT_NAME
      -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA
      -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME
      -Dsonar.gitlab.project_id=$CI_PROJECT_ID
      -Dsonar.branch.name=$CI_COMMIT_REF_NAME
  only:
    - master
    - prod
  tags:
    - mavenrunner03
  1. 修改pom.xml
    锁定 sonar-maven-plugin 插件版本号,确保插件的稳定性。
<plugins>
    <plugin>
        <groupId>org.sonarsource.scanner.maven</groupId>
        <artifactId>sonar-maven-plugin</artifactId>
        <version>3.7.0.1746</version>
    </plugin>
</plugins>

前端项目配置(Vue)

  1. .gitlab-ci.yml 配置
    在 .gitlab-ci.yml 文件中配置代码检测任务,确保在不同的分支上进行代码检测。
stages:
  - quality

variables:
  sonar_url: "http://172.0.0.155:9000"
  sonar_token: "**********************"

# 功能分支、发布分支检测
sonar_feature_job:
  stage: quality
  script:
    - rm -rf .scannerwork/
    - sonar-scanner -Dsonar.host.url=$sonar_url  -Dsonar.login=$sonar_token
      -Dsonar.sources=.
      -Dsonar.inclusions=src/**
      -Dsonar.exclusions=/node_modules/
      -Dsonar.projectKey=$CI_PROJECT_NAME
      -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA
      -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME
      -Dsonar.gitlab.project_id=$CI_PROJECT_ID
      -Dsonar.branch.name=$CI_COMMIT_REF_NAME
  only:
    - /^feat\/*/
    - /^release\/*/
  tags:
    - runnernodejs01

# 对uat进行管控
sonar_uat_job:
  stage: quality
  script:
    - rm -rf .scannerwork/
    - sonar-scanner -Dsonar.host.url=$sonar_url  -Dsonar.login=$sonar_token
      -Dsonar.sources=.
      -Dsonar.inclusions=src/**
      -Dsonar.exclusions=/node_modules/
      -Dsonar.projectKey=$CI_PROJECT_NAME
      -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA
      -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME
      -Dsonar.gitlab.project_id=$CI_PROJECT_ID
      -Dsonar.branch.name=$CI_COMMIT_REF_NAME
  only:
    - uat
  tags:
    - runnernodejs02

# 对生产环境进行管控
sonar_master_job:
  stage: quality
  script:
    - rm -rf .scannerwork/
    - sonar-scanner -Dsonar.host.url=$sonar_url  -Dsonar.login=$sonar_token
      -Dsonar.sources=.
      -Dsonar.inclusions=src/**
      -Dsonar.exclusions=/node_modules/
      -Dsonar.projectKey=$CI_PROJECT_NAME
      -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA
      -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME
      -Dsonar.gitlab.project_id=$CI_PROJECT_ID
      -Dsonar.branch.name=$CI_COMMIT_REF_NAME
  only:
    - master
    - prod
  tags:
    - runnernodejs03

扩展社区版功能

SonarQube社区版虽然功能强大,但仍有一些不足之处。我们可以通过自定义构建SonarQube镜像,添加必要的插件来完善其功能。具体步骤可参考:【Docker 构建自定义 SonarQube 镜像

配置 GitLab 单点登录

高版本已经内嵌该功能,无需添加插件实现。

  1. 管理员登录 GitLab 配置-> 应用-> 创建应用。
  2. 管理员登录 SonarQube,点击 配置-> ALM集成-> GitLab,创建配置。
  3. 配置完成后,点击下方,Enable、GitLab地址、Application ID。
  4. 修改通用-> Server base URL为 SonarQube 地址。

Gitlab:新建应用
SonarQube:创建配置
SonarQube:配置 Gitlab 地址
SonarQube:配置服务地址
SonarQube:单点登录效果

导入 阿里代码规范 配置

在SonarQube中搜索并激活阿里代码规范(p3c),确保代码符合行业标准。

激活阿里代码规范

相关参考资料