问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

GitLab CI/CD集成SonarQube进行代码质量检测

创作时间:
作者:
@小白创作中心

GitLab CI/CD集成SonarQube进行代码质量检测

引用
CSDN
1.
https://blog.csdn.net/demonlamei/article/details/137038266

在软件开发过程中,代码质量是确保项目成功的关键因素之一。SonarQube作为一款流行的代码质量检测工具,能够帮助开发团队自动化地检查代码规范、复杂度、重复率、测试覆盖率等多个维度的质量指标。本文将详细介绍如何在GitLab CI/CD中集成SonarQube,实现持续集成环境下的代码质量检测。

1. 背景

在软件开发过程中,代码质量是非常重要的。低质量的代码可能会导致各种问题,包括 bug、性能问题、安全漏洞等。随着项目的增长和代码库的复杂性增加,手动检查代码质量变得越来越困难。因此,引入自动化的静态代码分析工具是一种解决方案,可以帮助开发团队在早期发现并修复潜在的问题。

2. 功能

  • 代码质量评估:SonarQube分析代码的各个方面,包括代码规范、代码复杂度、代码重复、单元测试覆盖率、安全漏洞等,并根据预定义的规则集提供详细的报告。
  • 持续集成:SonarQube可以与持续集成工具(如Jenkins、GitLab CI等)集成,实现自动化的代码质量检查和报告生成。
  • 代码审查:SonarQube提供了一系列的代码审查功能,包括代码注释、代码块可读性等,帮助开发团队改进代码质量。
  • 安全漏洞检测:SonarQube可以检测常见的安全漏洞,如SQL注入、跨站脚本等,帮助开发团队及时修复潜在的安全问题。
  • 可视化报告:SonarQube提供了丰富的可视化报告,包括图表、趋势图等,帮助开发团队更直观地了解代码质量和项目趋势。

3. 架构图

4. 配置

4.1 整体组件图

4.2 安装服务端

本次使用docker-compose安装方式,参考url如下:
https://docs.sonarsource.com/sonarqube/9.9/setup-and-upgrade/install-the-server/

version: "3"
services:
  sonarqube:
    image: sonarqube:community
    depends_on:
- db
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
    volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_logs:/opt/sonarqube/logs
    ports:
- "9999:9000"
  db:
    image: postgres:12
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
    volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data
volumes:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_logs:
  postgresql:
  postgresql_data:

4.3 启动服务端

docker-compose up -d

4.4 配置SonarQube

登录SonarQube Web管理端,默认用户密码admin。配置参考url:
https://docs.sonarsource.com/sonarqube/9.9/devops-platform-integration/gitlab-integration/

4.5 SonarQube生成token

用途:生成token,用于在GitLab CI/CD中上传结果至SonarQube。
输入token名称,名称可自定义,复制生成后的token,后续用在GitLab CI/CD的job中。

4.6 GitLab Job定义

4.6.1 新增变量

variables:
  SONAR_TOKEN: "fb0cb746f2ac07999922c603a28e8135fcfd82a9"
  SONAR_HOST_URL: "http://192.168.1.231:9999"
  GIT_DEPTH: 0

4.6.2 新增job

注意:由于本人使用的java示例代码的jdk为17,因此需根据自己具体情况选择job的具体image。

sonarqube-check:
  stage: sonarqube-check
  image:
    name: maven:3.6-openjdk-17
    pull_policy: if-not-present
  variables:
    SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar"  # Defines the location of the analysis task cache
    GIT_DEPTH: "0"  # Tells git to fetch all the branches of the project, required by the analysis task
  cache:
    key: "${CI_JOB_NAME}"
    paths:
- .sonar/cache
  script:
- pwd
- mvn --batch-mode verify sonar:sonar -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.login=$SONAR_TOKEN
  allow_failure: true
  #  rules:
  #    - if: $CI_COMMIT_REF_NAME == 'main' || $CI_PIPELINE_SOURCE == 'merge_request_event'
  tags:
- "231"

在该script中调用了4.6.1中定义的变量,SONAR_TOKEN是4.5步骤生成的token。
Dsonar.host.url=S O N A R H O S T U R L − D s o n a r . l o g i n = SONAR_HOST_URL -Dsonar.login=SONARH OSTU RL−Dsonar.login=SONAR_TOKEN

5. 运行job

提交代码,运行CI/CD。

6. 验证

登录SonarQube查看代码检测结果。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号