Полное решение для интеграции SonarQube в CI/CD пайплайн
Быстрый старт • Документация • Примеры • FAQ
Это демо-репозиторий для двух целей:
- 🐳 Развертывание SonarQube на VPS - готовая Docker конфигурация для production
- ⚡ Интеграция с GitHub Actions - автоматический анализ кода в CI/CD пайплайне
- ✅ Готовая Docker Compose конфигурация (dev + production)
- ✅ GitHub Actions workflows (базовый + продвинутый с coverage)
- ✅ Nginx reverse proxy с поддержкой SSL
- ✅ Автоматические бэкапы PostgreSQL
- ✅ Примеры кода на JavaScript и Python
- ✅ Полная документация на русском языке
- ✅ Makefile с удобными командами
- ✅ Health check скрипты
| Документ | Описание |
|---|---|
| QUICKSTART.md | Быстрый старт за 5 минут |
| USAGE.md | Примеры команд и конфигураций |
| ARCHITECTURE.md | Архитектура и компоненты |
| FAQ.md | Часто задаваемые вопросы |
| CONTRIBUTING.md | Гайд для контрибьюторов |
| SUMMARY.md | Краткий обзор проекта |
# Клонировать репозиторий
git clone https://github.com/your-username/sonar_cube_github_action.git
cd sonar_cube_github_action
# Запустить автоматическое развертывание
./deploy.sh
# Или через Makefile
make deploySonarQube будет доступен на http://your-vps-ip:9000
Логин: admin | Пароль: admin (смените при первом входе!)
- Docker и Docker Compose установлены на VPS
- Минимум 2GB RAM
- Открыт порт 9000
# Увеличить лимиты для Elasticsearch (используется SonarQube)
sudo sysctl -w vm.max_map_count=524288
sudo sysctl -w fs.file-max=131072
# Сделать изменения постоянными
echo "vm.max_map_count=524288" | sudo tee -a /etc/sysctl.conf
echo "fs.file-max=131072" | sudo tee -a /etc/sysctl.conf# Клонировать репозиторий
git clone <your-repo-url>
cd sonar_cube_github_action
# Запустить контейнеры
docker-compose up -d
# Проверить логи
docker-compose logs -f sonarqube- Открыть http://your-vps-ip:9000
- Войти с дефолтными учетными данными:
- Login:
admin - Password:
admin
- Login:
- Сменить пароль при первом входе
- Создать новый проект
- Сгенерировать токен: User > My Account > Security > Generate Token
В настройках репозитория (Settings > Secrets and variables > Actions) добавить:
SONAR_TOKEN- токен, созданный в SonarQubeSONAR_HOST_URL- URL вашего SonarQube сервера (например:http://your-vps-ip:9000)
В SonarQube:
- Quality Gates > Create
- Установить условия (например: Coverage > 80%, Bugs = 0)
- Назначить проекту
После пуша в main/develop ветку автоматически запустится GitHub Action с анализом кода.
sonar_cube_github_action/
│
├── 🐳 Docker конфигурация
│ ├── docker-compose.yml # Базовая (development)
│ ├── docker-compose.prod.yml # Production с Nginx
│ ├── Dockerfile # Кастомный образ
│ ├── nginx.conf # Reverse proxy
│ └── .dockerignore # Игнорируемые файлы
│
├── ⚙️ GitHub Actions
│ └── .github/workflows/
│ ├── ci.yml # Базовый workflow
│ └── advanced-ci.yml # С coverage и тестами
│
├── 📝 Конфигурация проекта
│ ├── sonar-project.properties # Настройки SonarQube
│ ├── package.json # Node.js зависимости
│ ├── requirements.txt # Python зависимости
│ ├── jest.config.js # Конфигурация Jest
│ ├── pytest.ini # Конфигурация Pytest
│ ├── .eslintrc.js # ESLint правила
│ ├── .editorconfig # EditorConfig
│ └── env.template # Шаблон переменных окружения
│
├── 💻 Примеры кода
│ ├── example-code.js # JavaScript с проблемами
│ ├── example-code.test.js # Тесты для JS
│ ├── example-code.py # Python с проблемами
│ └── test_example_code.py # Тесты для Python
│
├── 🛠️ Утилиты и скрипты
│ ├── deploy.sh # Автоматическое развертывание
│ ├── backup.sh # Создание бэкапов
│ ├── restore.sh # Восстановление бэкапов
│ ├── healthcheck.sh # Проверка здоровья системы
│ └── Makefile # Удобные команды
│
├── 📚 Документация
│ ├── README.md # Основная документация (этот файл)
│ ├── QUICKSTART.md # Быстрый старт
│ ├── USAGE.md # Примеры использования
│ ├── ARCHITECTURE.md # Архитектура системы
│ ├── FAQ.md # Часто задаваемые вопросы
│ ├── CONTRIBUTING.md # Гайд для контрибьюторов
│ └── SUMMARY.md # Краткий обзор
│
└── 📄 Прочее
├── LICENSE # MIT License
└── .gitignore # Игнорируемые Git файлы
server {
listen 80;
server_name sonar.yourdomain.com;
location / {
proxy_pass http://localhost:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d sonar.yourdomain.com- Измените дефолтные пароли БД в
docker-compose.yml - Используйте environment файлы для секретов
- Настройте firewall (UFW/iptables)
- Регулярно обновляйте образы
# Установить SonarScanner
# macOS
brew install sonar-scanner
# Linux
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-5.0.1.3006-linux.zip
unzip sonar-scanner-cli-5.0.1.3006-linux.zip
export PATH=$PATH:/path/to/sonar-scanner/bin
# Запустить анализ
sonar-scanner \
-Dsonar.projectKey=my-project \
-Dsonar.sources=. \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.login=your-token# Проверить логи
docker-compose logs sonarqube
# Проверить системные лимиты
sysctl vm.max_map_count
ulimit -n- Проверить, что секреты
SONAR_TOKENиSONAR_HOST_URLустановлены - Убедиться, что SonarQube доступен из интернета
- Проверить, что токен валидный и не истек
# Основные команды
make help # Показать все доступные команды
make start # Запустить SonarQube
make stop # Остановить
make restart # Перезапустить
make logs # Показать логи
make status # Показать статус контейнеров
# Обслуживание
make backup # Создать бэкап БД
make restore # Восстановить бэкап
make health # Проверить здоровье системы
# Разработка
make test # Запустить тесты
make sonar # Локальный анализ SonarQube
# Production
make prod # Запустить в production режиме
make update # Обновить Docker образы# JavaScript/Node.js
npm test -- --coverage
npm run sonar
# Python
pytest --cov=. --cov-report=xml
sonar-scanner -Dsonar.token=YOUR_TOKEN
# Или через Makefile
make test
make sonarРедактируйте sonar-project.properties:
sonar.projectKey=my-project
sonar.projectName=My Awesome Project
sonar.sources=.
sonar.exclusions=**/node_modules/**,**/dist/**
sonar.javascript.lcov.reportPaths=coverage/lcov.infoНастройте критерии качества в SonarQube UI:
- Quality Gates > Create
- Добавьте условия (Coverage > 80%, Bugs = 0, и т.д.)
- Назначьте проекту
- Сменить дефолтный пароль
admin/admin - Изменить пароли БД в
env.template→.env - Настроить SSL/TLS (Let's Encrypt)
- Ограничить доступ через firewall
- Настроить регулярные бэкапы
- Обновлять Docker образы регулярно
Добавьте в репозиторий (Settings > Secrets and variables > Actions):
| Секрет | Описание | Пример |
|---|---|---|
SONAR_TOKEN |
Токен из SonarQube | sqp_abc123... |
SONAR_HOST_URL |
URL вашего SonarQube | http://1.2.3.4:9000 |
| Конфигурация | RAM | CPU | Disk | Проекты |
|---|---|---|---|---|
| Минимум | 2GB | 2 cores | 10GB | 1-5 малых |
| Рекомендовано | 4GB | 4 cores | 20GB | 5-20 средних |
| Оптимально | 8GB+ | 8 cores+ | 50GB+ (SSD) | 20+ или крупные |
# Проверить логи
docker-compose logs -f sonarqube
# Проверить системные лимиты
sysctl vm.max_map_count # Должно быть >= 262144
# Исправить
sudo sysctl -w vm.max_map_count=524288- ✅ Проверьте что секреты
SONAR_TOKENиSONAR_HOST_URLустановлены - ✅ Убедитесь что SonarQube доступен из интернета
- ✅ Откройте порт 9000 в firewall:
sudo ufw allow 9000 - ✅ Проверьте что токен валидный и имеет права "Execute Analysis"
Больше решений в FAQ.md
Приветствуются Pull Request'ы! См. CONTRIBUTING.md
- 🐛 Сообщить о баге
- 💡 Предложить улучшение
- 📝 Улучшить документацию
- 🌍 Перевести на другой язык
- ⭐ Поставить звезду проекту
Этот проект распространяется под лицензией MIT. См. LICENSE для деталей.
- SonarSource за отличный инструмент анализа кода
- GitHub за GitHub Actions
- Всем контрибьюторам этого проекта
- 📖 Документация
- ❓ FAQ
- 🐛 Issues
- 💬 Discussions
⭐ Если этот проект вам помог, поставьте звезду! ⭐
Made with ❤️ for developers