Ответ
Я интегрирую SonarQube в процесс разработки как инструмент непрерывного контроля качества кода. В моих проектах он запускается автоматически в CI/CD пайплайне (например, в GitLab CI или GitHub Actions) при каждом пулл-реквесте и пушe в основную ветку.
Пример шага для GitHub Actions:
- name: SonarQube Scan
uses: SonarSource/sonarqube-scan-action@v4
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
Как я его применяю:
- Quality Gate как критерий мержа: Настраиваю пороги по количеству багов, уязвимостей и покрытию кода. Если пайплайн не проходит Quality Gate, мерж-реквест не может быть завершён. Это предотвращает попадание проблемного кода в основную ветку.
- Анализ конкретных проблем: Не просто смотрю на общий балл, а изучаю отчёты. Например, SonarQube отлично находит в PHP-коде:
- Уязвимости: SQL-инъекции, XSS, небезопасные десериализации.
- Баги: Утечки памяти, условия гонки, неверные сравнения.
- «Запахи кода»: излишне сложные функции, дублирование, неиспользуемые переменные.
Пример кода, который будет помечен:
// Потенциальная SQL-инъекция (Critical Issue)
$query = "DELETE FROM orders WHERE id = " . $_POST['id'];
Исправленная версия, которую я использую:
$stmt = $connection->prepare("DELETE FROM orders WHERE id = ?");
$stmt->execute([$_POST['id']]);
- Отслеживание технического долга: Использую метрику «технический долг» для планирования рефакторинга. Регулярно выделяю время на исправление наиболее критичных или массовых проблем, отфильтрованных по severity и типу.