Что такое SonarQube?
SonarQube — это платформа для непрерывного анализа качества кода и выявления уязвимостей безопасности. Инструмент поддерживает более 25 языков программирования и интегрируется с популярными CI/CD системами для автоматического анализа кода.
Основные возможности SonarQube
- Статический анализ кода — обнаружение багов, уязвимостей и code smells
- Security анализ — выявление уязвимостей OWASP Top 10 и CWE
- Quality Gates — настраиваемые критерии качества для блокировки релизов
- Покрытие тестами — анализ code coverage и unit тестов
- Technical Debt — оценка технического долга и времени на исправление
- Дублирование кода — обнаружение дублированных блоков
- Интеграции — поддержка IDE, CI/CD и систем контроля версий
Установка SonarQube
1# Установка через Docker
2docker run -d --name sonarqube \
3 -p 9000:9000 \
4 -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true \
5 sonarqube:latest
6
7# Или скачать ZIP архив
8wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.9.0.65466.zip
9unzip sonarqube-9.9.0.65466.zip
10cd sonarqube-9.9.0.65466/bin/linux-x86-64/
11./sonar.sh start
Установка SonarQube Scanner
1# Установка SonarQube Scanner
2wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.8.0.2856-linux.zip
3unzip sonar-scanner-cli-4.8.0.2856-linux.zip
4export PATH=$PATH:/path/to/sonar-scanner-4.8.0.2856-linux/bin
5
6# Или через пакетный менеджер
7# pip install sonar-scanner
8pip install sonar-scanner
9
10# poetry add --group dev sonar-scanner
Конфигурация проекта
1# sonar-project.properties
2sonar.projectKey=my-project
3sonar.projectName=My Project
4sonar.projectVersion=1.0
5sonar.sources=src/
6sonar.tests=tests/
7sonar.language=py
8sonar.python.coverage.reportPaths=coverage.xml
9sonar.python.xunit.reportPath=test-results.xml
10
11# Исключения
12sonar.exclusions=**/*_test.py,**/migrations/**,**/venv/**
13sonar.test.exclusions=**/tests/**
14
15# Настройки для JavaScript/TypeScript
16sonar.javascript.lcov.reportPaths=coverage/lcov.info
Запуск анализа
1# Простой запуск
2sonar-scanner \
3 -Dsonar.projectKey=my-project \
4 -Dsonar.sources=. \
5 -Dsonar.host.url=http://localhost:9000 \
6 -Dsonar.login=admin \
7 -Dsonar.password=admin
8
9# С токеном аутентификации
10sonar-scanner \
11 -Dsonar.projectKey=my-project \
12 -Dsonar.sources=. \
13 -Dsonar.host.url=http://localhost:9000 \
14 -Dsonar.login=your-token
15
16# Анализ с coverage
17pytest --cov=src --cov-report=xml
18sonar-scanner
Интеграция с GitLab CI
1# .gitlab-ci.yml
2stages:
3 - test
4 - quality
5
6test:
7 stage: test
8 script:
9 - pip install pytest pytest-cov
10 - pytest --cov=src --cov-report=xml --junitxml=test-results.xml
11
12sonarqube-check:
13 stage: quality
14 image: sonarsource/sonar-scanner-cli:latest
15 variables:
16 SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar"
17 GIT_DEPTH: "0"
18 cache:
19 key: "${CI_JOB_NAME}"
20 paths:
21 - .sonar/cache
22 script:
23 - sonar-scanner
24 only:
25 - merge_requests
26 - master
27 - develop
Интеграция с GitHub Actions
1# .github/workflows/sonar.yml
2name: SonarQube Analysis
3on:
4 push:
5 branches: [ main, develop ]
6 pull_request:
7 branches: [ main ]
8
9jobs:
10 sonarqube:
11 runs-on: ubuntu-latest
12 steps:
13 - uses: actions/checkout@v3
14 with:
15 fetch-depth: 0
16
17 - name: Set up Python
18 uses: actions/setup-python@v4
19 with:
20 python-version: '3.9'
21
22 - name: Install dependencies
23 run: |
24 pip install pytest pytest-cov
25 pip install -r requirements.txt
26
27 - name: Run tests with coverage
28 run: |
29 pytest --cov=src --cov-report=xml
30
31 - name: SonarQube Scan
32 uses: sonarsource/sonarqube-scan-action@master
33 env:
34 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
35 SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
36 SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
Настройка Quality Gates
1// Пример Quality Gate правил
2{
3 "conditions": [
4 {
5 "metric": "coverage",
6 "operator": "LT",
7 "value": "80.0"
8 },
9 {
10 "metric": "duplicated_lines_density",
11 "operator": "GT",
12 "value": "3.0"
13 },
14 {
15 "metric": "maintainability_rating",
16 "operator": "GT",
17 "value": "1"
18 },
19 {
20 "metric": "reliability_rating",
21 "operator": "GT",
22 "value": "1"
23 },
24 {
25 "metric": "security_rating",
26 "operator": "GT",
27 "value": "1"
28 }
29 ]
30}
Анализ результатов
- Bugs — ошибки в коде, которые могут привести к неправильному поведению
- Vulnerabilities — уязвимости безопасности
- Code Smells — проблемы поддерживаемости кода
- Coverage — процент покрытия кода тестами
- Duplications — дублированный код
- Technical Debt — время, необходимое для исправления проблем
Настройка правил анализа
1# Создание профиля качества через API
2curl -X POST \
3 'http://localhost:9000/api/qualityprofiles/create' \
4 -H 'Authorization: Basic YWRtaW46YWRtaW4=' \
5 -d 'name=Custom Python Profile&language=py'
6
7# Активация правил
8curl -X POST \
9 'http://localhost:9000/api/qualityprofiles/activate_rule' \
10 -H 'Authorization: Basic YWRtaW46YWRtaW4=' \
11 -d 'key=profile_key&rule=python:S1481'
Интеграция с IDE
Мониторинг и метрики
1# Python скрипт для получения метрик
2import requests
3import base64
4
5def get_sonar_metrics(project_key, sonar_url, token):
6 auth = base64.b64encode(f"{token}:".encode()).decode()
7 headers = {"Authorization": f"Basic {auth}"}
8
9 url = f"{sonar_url}/api/measures/component"
10 params = {
11 "component": project_key,
12 "metricKeys": "coverage,bugs,vulnerabilities,code_smells"
13 }
14
15 response = requests.get(url, headers=headers, params=params)
16 return response.json()
17
18# Использование
19metrics = get_sonar_metrics("my-project", "http://localhost:9000", "token")
20print(metrics)
Когда использовать SonarQube
- Проекты с требованиями к качеству и безопасности кода
- Команды разработки с code review процессами
- CI/CD пайплайны с автоматическими проверками
- Enterprise проекты с compliance требованиями
- Проекты с несколькими языками программирования
- Необходимость отслеживания технического долга
Преимущества SonarQube
- Комплексный анализ — качество, безопасность, покрытие в одном инструменте
- Поддержка языков — 25+ языков программирования
- Интеграции — IDE, CI/CD, системы контроля версий
- Настраиваемость — гибкие правила и Quality Gates
- Визуализация — понятные дашборды и отчеты
- Community — активное сообщество и документация
Альтернативы SonarQube
- CodeClimate — cloud-based платформа анализа кода
- Codacy — автоматический code review
- DeepCode — AI-powered анализ кода
- ESLint/Pylint — специализированные линтеры
- Checkmarx — enterprise решение для SAST
- Veracode — платформа application security
Best Practices
- Настрой Quality Gates соответствующие проекту
- Интегрируй в CI/CD для автоматических проверок
- Используй SonarLint в IDE для раннего обнаружения проблем
- Регулярно обновляй правила анализа
- Обучай команду работе с результатами анализа
- Мониторь тренды качества кода во времени
FAQ
Подходит ли SonarQube для продакшена?
Да, SonarQube широко используется в production средах крупными компаниями. Это зрелое решение с enterprise поддержкой и высокой надежностью.
Какие требования к инфраструктуре?
Минимальные требования: 2 GB RAM, 1 CPU core. Для больших проектов рекомендуется 4+ GB RAM и dedicated база данных (PostgreSQL/Oracle).
Можно ли использовать SonarQube бесплатно?
Да, Community Edition бесплатна и подходит для большинства проектов. Commercial версии добавляют поддержку дополнительных языков и enterprise функции.