Аналіз якості коду за допомогою SonarQube
SonarQube сканує вашу кодову базу на запахи коду, дублювання, потенційні баги та уразливості. Quality Gate — автоматичний поріг: PR не об'єднується, якщо аналіз не пройде.
SonarQube: self-hosted
# 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
# .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: налаштування порогів
SonarQube Dashboard → Quality Gates → Create
Умови для нових строк коду:
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: хмарна версія
# Безплатно для відкритих проектів
- 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
Ключові метрики SonarQube:
- Coverage — відсоток покриття тестами
- Duplications — дублевані блоки коду
- Code Smells — запахи коду (складність, когнітивна складність)
- Bugs — імовірні баги (null pointer, неправильні умови)
- Vulnerabilities — потенційні уразливості
- Security Hotspots — вимагають ручного огляду
Налаштування SonarQube з GitHub Actions та Quality Gate — 1–2 робочих дні.







