Как используешь SonarQube?

«Как используешь SonarQube?» — вопрос из категории DevOps, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я интегрирую 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 }}

Как я его применяю:

  1. Quality Gate как критерий мержа: Настраиваю пороги по количеству багов, уязвимостей и покрытию кода. Если пайплайн не проходит Quality Gate, мерж-реквест не может быть завершён. Это предотвращает попадание проблемного кода в основную ветку.
  2. Анализ конкретных проблем: Не просто смотрю на общий балл, а изучаю отчёты. Например, 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']]);
  1. Отслеживание технического долга: Использую метрику «технический долг» для планирования рефакторинга. Регулярно выделяю время на исправление наиболее критичных или массовых проблем, отфильтрованных по severity и типу.