Уявіть: ви тиждень рефакторите модуль оплати, а через місяць інший розробник виправляє баг і випадково ламає сусідній функціонал. Або юніт-тести зелені, але в проді падає через гонку даних. Такі проблеми — наслідок відсутності системного контролю якості. SonarQube сканує кодову базу на запахи коду, дублювання, потенційні баги та вразливості. Quality Gate — автоматичний поріг: PR не мержиться, якщо аналіз не пройдено. Ми — інженери з досвідом понад десять років — впроваджуємо SonarQube на проектах будь-якого масштабу: від лендінгів до високонавантажених платформ.
Чому варто використовувати SonarQube?
Без статичного аналізу код з часом деградує. Регулярне сканування виявляє проблеми, які code review може пропустити. За даними Wikipedia, SonarQube підтримує понад 30 мов, включаючи JavaScript, TypeScript, Python, PHP, C#, Java. У наших проектах він допоміг скоротити кількість багів на 30% за перший квартал, а економія часу на code review склала близько 20 годин на місяць. Інтеграція з CI/CD — GitHub Actions, GitLab CI, Jenkins — робить перевірку автоматичною.
Як ми налаштовуємо SonarQube?
Ставимо self-hosted версію на Docker або розгортаємо SonarCloud для open-source. Налаштування включає: конфігурацію правил аналізу під ваш стек, налаштування метрик для Quality Gate, генерацію токенів та інтеграцію з репозиторієм. Приклад типового розгортання:
# Docker Compose
services:
sonarqube:
image: sonarqube:10-community
environment:
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
ports:
- "9000:9000"
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_logs:/opt/sonarqube/logs
db:
image: postgres:15
environment:
POSTGRES_DB: sonar
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
volumes:
- sonar_db:/var/lib/postgresql/data
volumes:
sonarqube_data:
sonarqube_logs:
sonar_db:
Конфігурація проекту
Вказуємо шляхи до вихідних кодів, тестів, звітів покриття та виключаємо шаблонні файли:
# sonar-project.properties
sonar.projectKey=my-project
sonar.projectName=My Project
sonar.projectVersion=1.0
sonar.sources=src
sonar.tests=src
sonar.test.inclusions=**/*.test.ts,**/*.spec.ts
sonar.exclusions=**/*.d.ts,**/node_modules/**,**/.next/**
# TypeScript
sonar.typescript.lcov.reportPaths=coverage/lcov.info
# Дублювання: мінімум токенів для спрацювання
sonar.cpd.ts.minimumTokens=100
GitHub Actions інтеграція
Додаємо workflow для автоматичного сканування при кожному пуші або PR:
# .github/workflows/sonarqube.yml
name: SonarQube Analysis
on:
pull_request:
branches: [main]
push:
branches: [main]
jobs:
sonar:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # shallow clone відключає аналіз змін
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- run: npm ci
- name: Generate coverage report
run: npm test -- --coverage --coverageReporters=lcov
env:
CI: true
- name: SonarQube Scan
uses: SonarSource/sonarqube-scan-action@v2
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
- name: SonarQube Quality Gate check
uses: SonarSource/sonarqube-quality-gate-action@v1
timeout-minutes: 5
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
Що таке Quality Gate і як його налаштувати?
Quality Gate визначає, які зміни вважаються прийнятними. Ми виставляємо жорсткі, але реалістичні пороги:
| Умова (для нових рядків) | Поріг | Статус |
|---|---|---|
| Coverage | < 70% | FAILED |
| Duplicated Lines | > 3% | FAILED |
| Maintainability Rating | < A | FAILED |
| Reliability Rating | < A | FAILED |
| Security Rating | < A | FAILED |
| Security Hotspots Reviewed | < 100% | FAILED |
Ці метрики дають повну картину технічного боргу.
SonarCloud: хмарний варіант
Якщо проект open-source або ви не хочете адмініструвати сервер, використовуємо SonarCloud. Він безкоштовний для публічних репозиторіїв, інтеграція — у кілька кліків:
# Безкоштовно для відкритих проектів
- name: SonarCloud Scan
uses: SonarSource/sonarcloud-github-action@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
with:
args: >
-Dsonar.organization=my-org
-Dsonar.projectKey=my-org_my-project
-Dsonar.sources=src
-Dsonar.typescript.lcov.reportPaths=coverage/lcov.info
Порівняємо self-hosted vs SonarCloud: self-hosted дає повний контроль над даними та кастомізацію, але потребує адміністрування. SonarCloud швидше розгортається, але має обмеження щодо конфіденційності.
Ключові метрики SonarQube
| Метрика | Опис | Типовий поріг |
|---|---|---|
| Coverage | Відсоток покриття тестами | ≥ 80% |
| Duplications | Дубльовані блоки коду | ≤ 3% |
| Code Smells | Запахи коду (складність, когнітивна складність) | Рейтинг A |
| Bugs | Імовірні баги (null pointer, невірні умови) | 0 |
| Vulnerabilities | Потенційні вразливості | 0 |
| Security Hotspots | Потребують ручного review | 100% reviewed |
Поетапний процес впровадження
- Аналіз кодової бази — запускаємо перше сканування, фіксуємо поточні метрики та технічний борг.
- Налаштування профілю якості — підбираємо правила під ваш стек (React, Laravel, Python тощо).
- Конфігурація Quality Gate — встановлюємо пороги на основі ваших SLA.
- Інтеграція з CI/CD — підключаємо GitHub Actions, GitLab CI, Jenkins або Bitbucket Pipelines.
- Навчання команди — проводимо воркшоп з роботи зі звітами та виправлення знайдених проблем.
- Моніторинг та підтримка — налаштовуємо дашборди та алерти, гарантуємо працездатність два тижні після впровадження.
Типові помилки при налаштуванні
- Shallow clone в CI: відключає аналіз змін — використовуйте fetch-depth: 0.
- Пропуск виключень для згенерованих файлів: вони завищують кількість запахів.
- Відсутність coverage report: без нього Quality Gate не перевірить покриття.
- Занадто м'які пороги: Gate пропускає проблемний код.
Що входить у налаштування SonarQube?
Ми надаємо повний цикл робіт:
- Розгортання SonarQube (Docker / bare metal / хмара)
- Налаштування профілів якості та правил під ваш стек
- Конфігурація Quality Gate з урахуванням ваших вимог
- Інтеграція з CI/CD (GitHub Actions, GitLab CI, Jenkins, Bitbucket Pipelines)
- Створення дашбордів та алертів
- Документація щодо процесу та навчання команди
- Гарантія коректної роботи протягом двох тижнів після впровадження
Терміни та вартість
Базове налаштування займає від 1 до 2 робочих днів. Складні проекти з кількома репозиторіями та кастомними правилами — до 5 днів. Вартість розраховується індивідуально під кожен проект. Наші інженери впровадили SonarQube на 50+ проектах. Зв'яжіться з нами — ми оцінимо ваш код і запропонуємо оптимальне рішення. Отримайте консультацію прямо зараз.







