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

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

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

安装配置 SonarQube

SonarQube 8.9 只支持,PostgreSQL 数据库。

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

通过 Rancher 安装 PostgreSQL

Rancher 安装 PostgreSQL
配置环境变量
配置数据卷

通过 Rancher 安装 SonarQube

配置基础信息

配置环境变量

配置项目接入代码检测

Java项目配置(Maven)

.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

**修改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)

.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镜像,添加部分插件完善。详情可看:【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:单点登录效果

导入 阿里代码规范 配置

直接在 规则搜索 p3c 点击激活即可。

image.png

相关参考资料