Skip to content

misterserge/sonar-cube-github

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔍 SonarQube + GitHub Actions Integration

Полное решение для интеграции SonarQube в CI/CD пайплайн

License: MIT Docker SonarQube

Быстрый стартДокументацияПримерыFAQ


📖 О проекте

Это демо-репозиторий для двух целей:

  1. 🐳 Развертывание SonarQube на VPS - готовая Docker конфигурация для production
  2. ⚡ Интеграция с 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 Краткий обзор проекта

🚀 Быстрый старт

Вариант 1: Автоматическое развертывание (рекомендуется)

# Клонировать репозиторий
git clone https://github.com/your-username/sonar_cube_github_action.git
cd sonar_cube_github_action

# Запустить автоматическое развертывание
./deploy.sh

# Или через Makefile
make deploy

SonarQube будет доступен на http://your-vps-ip:9000

Логин: admin | Пароль: admin (смените при первом входе!)

Вариант 2: Ручное развертывание

🚀 Развертывание SonarQube на VPS

Предварительные требования

  • Docker и Docker Compose установлены на VPS
  • Минимум 2GB RAM
  • Открыт порт 9000

Настройка системы (для Linux VPS)

# Увеличить лимиты для 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

Запуск SonarQube

# Клонировать репозиторий
git clone <your-repo-url>
cd sonar_cube_github_action

# Запустить контейнеры
docker-compose up -d

# Проверить логи
docker-compose logs -f sonarqube

Первоначальная настройка

  1. Открыть http://your-vps-ip:9000
  2. Войти с дефолтными учетными данными:
    • Login: admin
    • Password: admin
  3. Сменить пароль при первом входе
  4. Создать новый проект
  5. Сгенерировать токен: User > My Account > Security > Generate Token

🔧 Настройка GitHub Actions

1. Добавить секреты в GitHub

В настройках репозитория (Settings > Secrets and variables > Actions) добавить:

  • SONAR_TOKEN - токен, созданный в SonarQube
  • SONAR_HOST_URL - URL вашего SonarQube сервера (например: http://your-vps-ip:9000)

2. Настроить Quality Gate

В SonarQube:

  1. Quality Gates > Create
  2. Установить условия (например: Coverage > 80%, Bugs = 0)
  3. Назначить проекту

3. Запустить анализ

После пуша в 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 файлы

🔒 Production настройки

Использование Nginx как reverse proxy

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;
    }
}

SSL с Let's Encrypt

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

🛠 Troubleshooting

SonarQube не запускается

# Проверить логи
docker-compose logs sonarqube

# Проверить системные лимиты
sysctl vm.max_map_count
ulimit -n

GitHub Action падает

  • Проверить, что секреты SONAR_TOKEN и SONAR_HOST_URL установлены
  • Убедиться, что SonarQube доступен из интернета
  • Проверить, что токен валидный и не истек

🎯 Примеры

Управление через Makefile

# Основные команды
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

Quality Gates

Настройте критерии качества в SonarQube UI:

  1. Quality Gates > Create
  2. Добавьте условия (Coverage > 80%, Bugs = 0, и т.д.)
  3. Назначьте проекту

🛡️ Безопасность

Production Checklist

  • Сменить дефолтный пароль admin/admin
  • Изменить пароли БД в env.template.env
  • Настроить SSL/TLS (Let's Encrypt)
  • Ограничить доступ через firewall
  • Настроить регулярные бэкапы
  • Обновлять Docker образы регулярно

GitHub Secrets

Добавьте в репозиторий (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+ или крупные

🐛 Troubleshooting

SonarQube не запускается

# Проверить логи
docker-compose logs -f sonarqube

# Проверить системные лимиты
sysctl vm.max_map_count  # Должно быть >= 262144

# Исправить
sudo sysctl -w vm.max_map_count=524288

GitHub Action падает

  • ✅ Проверьте что секреты 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
  • Всем контрибьюторам этого проекта

📞 Поддержка


🔗 Полезные ссылки

Официальная документация

Сообщество


⭐ Если этот проект вам помог, поставьте звезду! ⭐

Made with ❤️ for developers

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published