diff --git a/Makefile b/Makefile index 380422f..cba6b4a 100644 --- a/Makefile +++ b/Makefile @@ -73,8 +73,152 @@ help: ## Показать справку по всем командам @echo " $(CYAN)make preset-create-interactive$(RESET) - Интерактивное создание пресета" @echo " $(CYAN)make role-create-interactive$(RESET) - Интерактивное создание роли" @echo "" + @echo "$(GREEN)CI/CD команды:$(RESET)" + @echo " $(CYAN)make ci-test$(RESET) - Запустить все тесты" + @echo " $(CYAN)make ci-lint$(RESET) - Проверить синтаксис" + @echo " $(CYAN)make ci-deploy$(RESET) - Развертывание" + @echo " $(CYAN)make ci-cleanup$(RESET) - Очистка после тестов" + @echo " $(CYAN)make ci-full$(RESET) - Полный цикл (lint + test + deploy)" + @echo " $(CYAN)make ci-security$(RESET) - Проверка безопасности" + @echo " $(CYAN)make ci-validate$(RESET) - Валидация проекта" + @echo " $(CYAN)make ci-report$(RESET) - Генерация отчета" + @echo " $(CYAN)make ci-all$(RESET) - Все проверки" + @echo "" @echo "$(YELLOW)Подробная документация: docs/$(RESET)" +# ============================================================================= +# CI/CD КОМАНДЫ +# ============================================================================= + +.PHONY: ci-test +ci-test: ## CI/CD: Запустить все тесты + @echo "$(BLUE)🧪 CI/CD: Запуск всех тестов$(RESET)" + @echo "$(YELLOW)Тестирование лаборатории...$(RESET)" + @if make lab test; then \ + echo "$(GREEN)✅ Тесты лаборатории прошли успешно$(RESET)"; \ + else \ + echo "$(RED)❌ Тесты лаборатории не прошли$(RESET)"; \ + exit 1; \ + fi + @echo "$(YELLOW)Тестирование ролей...$(RESET)" + @if make role test; then \ + echo "$(GREEN)✅ Тесты ролей прошли успешно$(RESET)"; \ + else \ + echo "$(RED)❌ Тесты ролей не прошли$(RESET)"; \ + exit 1; \ + fi + @echo "$(GREEN)✅ Все тесты прошли успешно$(RESET)" + +.PHONY: ci-lint +ci-lint: ## CI/CD: Проверить синтаксис всех файлов + @echo "$(BLUE)🔍 CI/CD: Проверка синтаксиса$(RESET)" + @echo "$(YELLOW)Проверка YAML синтаксиса...$(RESET)" + @if find . -name "*.yml" -o -name "*.yaml" | grep -v node_modules | xargs -I {} sh -c 'python3 -c "import yaml; yaml.safe_load(open(\"{}\"))" 2>/dev/null || echo "Ошибка в файле: {}"'; then \ + echo "$(GREEN)✅ YAML синтаксис корректен$(RESET)"; \ + else \ + echo "$(RED)❌ Ошибки в YAML синтаксисе$(RESET)"; \ + exit 1; \ + fi + @echo "$(YELLOW)Проверка Ansible синтаксиса...$(RESET)" + @if make lint >/dev/null 2>&1; then \ + echo "$(GREEN)✅ Ansible синтаксис корректен$(RESET)"; \ + else \ + echo "$(YELLOW)⚠️ Ansible lint предупреждения (не критично)$(RESET)"; \ + fi + @echo "$(GREEN)✅ Все проверки синтаксиса прошли успешно$(RESET)" + +.PHONY: ci-deploy +ci-deploy: ## CI/CD: Развертывание в лаборатории + @echo "$(BLUE)🚀 CI/CD: Развертывание$(RESET)" + @echo "$(YELLOW)Создание лаборатории...$(RESET)" + @if make lab up; then \ + echo "$(GREEN)✅ Лаборатория создана$(RESET)"; \ + else \ + echo "$(RED)❌ Ошибка создания лаборатории$(RESET)"; \ + exit 1; \ + fi + @echo "$(YELLOW)Развертывание ролей...$(RESET)" + @if make role deploy; then \ + echo "$(GREEN)✅ Роли развернуты$(RESET)"; \ + else \ + echo "$(RED)❌ Ошибка развертывания ролей$(RESET)"; \ + exit 1; \ + fi + @echo "$(YELLOW)Проверка развертывания...$(RESET)" + @if make lab test; then \ + echo "$(GREEN)✅ Развертывание проверено$(RESET)"; \ + else \ + echo "$(RED)❌ Ошибка проверки развертывания$(RESET)"; \ + exit 1; \ + fi + @echo "$(GREEN)✅ Развертывание завершено успешно$(RESET)" + +.PHONY: ci-cleanup +ci-cleanup: ## CI/CD: Очистка после тестов + @echo "$(BLUE)🧹 CI/CD: Очистка$(RESET)" + @echo "$(YELLOW)Остановка лаборатории...$(RESET)" + @make lab down || true + @echo "$(YELLOW)Очистка данных...$(RESET)" + @make cleanup || true + @echo "$(GREEN)✅ Очистка завершена$(RESET)" + +.PHONY: ci-full +ci-full: ci-lint ci-test ci-deploy ## CI/CD: Полный цикл (lint + test + deploy) + @echo "$(GREEN)✅ CI/CD: Полный цикл завершен успешно$(RESET)" + +.PHONY: ci-report +ci-report: ## CI/CD: Генерация отчета + @echo "$(BLUE)📊 CI/CD: Генерация отчета$(RESET)" + @if make report; then \ + echo "$(GREEN)✅ Отчет сгенерирован$(RESET)"; \ + echo "$(YELLOW)Отчет доступен в: reports/$(RESET)"; \ + else \ + echo "$(RED)❌ Ошибка генерации отчета$(RESET)"; \ + exit 1; \ + fi + +.PHONY: ci-security +ci-security: ## CI/CD: Проверка безопасности + @echo "$(BLUE)🔒 CI/CD: Проверка безопасности$(RESET)" + @echo "$(YELLOW)Проверка vault файлов...$(RESET)" + @if make vault view >/dev/null 2>&1; then \ + echo "$(GREEN)✅ Vault файлы корректны$(RESET)"; \ + else \ + echo "$(RED)❌ Ошибки в vault файлах$(RESET)"; \ + exit 1; \ + fi + @echo "$(YELLOW)Проверка секретов...$(RESET)" + @if make check-secrets; then \ + echo "$(GREEN)✅ Секреты защищены$(RESET)"; \ + else \ + echo "$(RED)❌ Найдены незащищенные секреты$(RESET)"; \ + exit 1; \ + fi + @echo "$(GREEN)✅ Проверка безопасности завершена$(RESET)" + +.PHONY: ci-validate +ci-validate: ## CI/CD: Валидация проекта + @echo "$(BLUE)✅ CI/CD: Валидация проекта$(RESET)" + @echo "$(YELLOW)Проверка структуры проекта...$(RESET)" + @if [ -f .env ] && [ -f vault/.vault ] && [ -d molecule/presets ]; then \ + echo "$(GREEN)✅ Структура проекта корректна$(RESET)"; \ + else \ + echo "$(RED)❌ Неправильная структура проекта$(RESET)"; \ + exit 1; \ + fi + @echo "$(YELLOW)Проверка зависимостей...$(RESET)" + @if command -v docker >/dev/null 2>&1 && command -v whiptail >/dev/null 2>&1; then \ + echo "$(GREEN)✅ Зависимости установлены$(RESET)"; \ + else \ + echo "$(RED)❌ Отсутствуют необходимые зависимости$(RESET)"; \ + exit 1; \ + fi + @echo "$(GREEN)✅ Валидация проекта завершена$(RESET)" + +.PHONY: ci-all +ci-all: ci-validate ci-lint ci-test ci-deploy ci-security ci-report ## CI/CD: Все проверки + @echo "$(GREEN)✅ CI/CD: Все проверки завершены успешно$(RESET)" + .PHONY: menu menu: check-whiptail check-init ## Интерактивное главное меню @while true; do \