GitLab CI/CD集成SonarQube进行代码质量检测
GitLab CI/CD集成SonarQube进行代码质量检测
在软件开发过程中,代码质量是确保项目成功的关键因素之一。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查看代码检测结果。