SonarQube - это платформа с открытым исходным кодом для непрерывной инспекции качества кода. Она автоматически находит баги, уязвимости, code smells и измеряет покрытие тестами.
- JavaScript/TypeScript
- Python
- Java
- C#
- PHP
- Go
- Ruby
- Kotlin
- и многие другие (27+ языков)
- Community Edition (бесплатная): поддержка основных языков, базовые метрики
- Developer Edition: ветвление анализа, больше языков, расширенные метрики
- Enterprise/Data Center: масштабирование, портфолио проектов, SLA
- RAM: 2GB (рекомендуется 4GB+)
- CPU: 2 cores
- Disk: 10GB+
- OS: Linux, macOS, Windows
- Docker: версия 20.10+
- Docker Compose: версия 2.0+
Проверьте:
- Системные лимиты:
sysctl vm.max_map_count(должно быть >= 262144) - Доступную память:
free -h - Логи:
docker-compose logs sonarqube - Порт 9000 не занят:
netstat -tulpn | grep 9000
Отредактируйте docker-compose.yml:
ports:
- "8080:9000" # вместо "9000:9000"Нет. С версии 8.0 SonarQube поддерживает только PostgreSQL. MySQL больше не поддерживается.
- Проверьте что секрет создан: Settings > Secrets and variables > Actions
- Имя должно быть SONAR_TOKEN (не sonar_token)
- Проверьте что workflow использует правильное имя:
${{ secrets.SONAR_TOKEN }}
Это нормально! Означает что код не соответствует критериям качества:
- Проверьте отчет в SonarQube UI
- Исправьте найденные проблемы
- Или измените критерии Quality Gate
В sonar-project.properties:
sonar.exclusions=**/node_modules/**,**/dist/**,**/*.test.jsИли в workflow через args:
-Dsonar.exclusions=**/node_modules/**,**/dist/**Да:
on:
push:
branches:
- main # только main- Запустите тесты с coverage
- Укажите путь к отчету:
-Dsonar.javascript.lcov.reportPaths=coverage/lcov.info
-Dsonar.python.coverage.reportPaths=coverage.xmlПроблемы поддерживаемости кода:
- Дублирование кода
- Сложная логика
- Неиспользуемые переменные
- Плохие практики
Не баги, но снижают качество кода.
Оценка времени, необходимого для исправления всех проблем. Измеряется в человеко-днях.
Набор условий (например: "Coverage > 80%", "Bugs = 0"), которые должны быть выполнены. Если хотя бы одно условие не выполнено - Quality Gate провален.
- Большой проект
- Много файлов
- Включен анализ всех веток
- Недостаточно ресурсов
Решения:
- Увеличить CPU/RAM
- Использовать incremental analysis
- Добавить больше exclusions
- Войдите с admin/admin
- При первом входе система попросит сменить пароль
- Или: Administration > Security > Users > admin > Change password
- User > My Account > Security
- Generate Token
- Name:
github-actions - Type: Global Analysis Token
- Скопируйте токен (показывается один раз!)
С мерами предосторожности:
- ✅ Используйте SSL
- ✅ Сильные пароли
- ✅ Обновляйте регулярно
- ✅ Firewall правила
⚠️ Рассмотрите VPN для админ доступа
В зашифрованном виде на серверах GitHub. Они:
- Не показываются в логах
- Доступны только во время выполнения workflow
- Требуют прав на репозиторий для изменения
Не обязательно, но рекомендуется для:
- SSL/TLS терминации
- Сжатия gzip
- Кэширования
- Балансировки (при масштабировании)
- Получите сертификат (Let's Encrypt)
- Используйте
docker-compose.prod.yml - Настройте
nginx.conf - Или используйте Cloudflare
# Ручной
make backup
# Автоматический (crontab)
0 2 * * * /path/to/backup.shmake restore
# или
./restore.sh path/to/backup.sql# 1. Сделать бэкап!
make backup
# 2. Обновить образы
docker-compose pull
# 3. Перезапустить
docker-compose up -dsudo sysctl -w vm.max_map_count=524288
echo "vm.max_map_count=524288" | sudo tee -a /etc/sysctl.conf- Проверьте что PostgreSQL контейнер запущен:
docker-compose ps - Проверьте логи:
docker-compose logs db - Проверьте credentials в
.env - Перезапустите:
docker-compose restart
Токен не имеет прав. Создайте новый токен с правами "Execute Analysis".
- Увеличьте RAM контейнера
- Добавьте swap
- Проверьте disk I/O
- Оптимизируйте PostgreSQL
- Рассмотрите SSD вместо HDD
- Увеличьте timeout в workflow:
timeout-minutes: 30- Оптимизируйте exclusions
- Используйте incremental analysis
Да:
sonarqube:
image: sonarsource/sonar-scanner-cli:latest
script:
- sonar-scanner -Dsonar.projectKey=$CI_PROJECT_NAMEДа, есть официальный плагин SonarQube Scanner for Jenkins.
Да:
- Administration > Webhooks
- Создайте webhook с URL Slack incoming webhook
- Или используйте GitHub Action для комментирования
Да, GitHub Actions работает с приватными репозиториями. Секреты также поддерживаются.
Зависит от ресурсов:
- 2GB RAM: 1-5 небольших проектов
- 4GB RAM: 5-20 средних проектов
- 8GB+ RAM: 20+ или несколько больших проектов
- Используйте exclusions для ненужных файлов
- Включите incremental analysis
- Анализируйте только измененные файлы в PR
- Увеличьте CPU
- Используйте SSD
По умолчанию:
- Issues: бесконечно
- Snapshots: можно настроить (Administration > General > Database Cleaner)
- Community Edition: Бесплатно
- Developer Edition: от $150/год
- Enterprise Edition: от $20,000/год
- Data Center Edition: Custom pricing
- Public репозитории: Бесплатно
- Private репозитории:
- Free plan: 2000 минут/месяц
- Pro: 3000 минут/месяц
- Team: 10000 минут/месяц
- Shared: $5-10/месяц (для тестов)
- VPS: $10-50/месяц (для production)
- Dedicated: $100+/месяц (для enterprise)
Рекомендации:
- DigitalOcean: от $12/месяц (2GB RAM)
- Hetzner: от €4/месяц (2GB RAM)
- AWS EC2: от $15/месяц (t3.small)
- SonarQube Community Forum
- Stack Overflow - тег
sonarqube - GitHub Issues
- Документация
- SonarQube: https://github.com/SonarSource/sonarqube/issues
- Этот проект: https://github.com/your-username/sonar_cube_github_action/issues
- Fork репозиторий
- Создайте feature branch
- Сделайте изменения
- Создайте Pull Request