feat: Добавлены CI/CD команды для автоматизированного тестирования

- Добавлены неинтерактивные CI/CD команды для автоматизации
- Команды для тестирования, линтинга, развертывания и очистки
- Команды для проверки безопасности и валидации проекта
- Команды для генерации отчетов

CI/CD команды:
- ci-test: Запуск всех тестов (лаборатория + роли)
- ci-lint: Проверка синтаксиса (YAML + Ansible)
- ci-deploy: Развертывание в лаборатории
- ci-cleanup: Очистка после тестов
- ci-full: Полный цикл (lint + test + deploy)
- ci-security: Проверка безопасности (vault + секреты)
- ci-validate: Валидация проекта (структура + зависимости)
- ci-report: Генерация отчета
- ci-all: Все проверки

Особенности:
- Неинтерактивные команды для CI/CD пайплайнов
- Цветной вывод для лучшей читаемости
- Обработка ошибок с exit codes
- Проверка зависимостей и структуры проекта
- Устойчивость к ошибкам ansible-lint
- Автоматическая очистка после тестов

Использование в CI/CD:
- make ci-validate - проверка готовности проекта
- make ci-lint - проверка синтаксиса
- make ci-test - запуск тестов
- make ci-deploy - развертывание
- make ci-security - проверка безопасности
- make ci-report - генерация отчета
- make ci-cleanup - очистка после тестов

Автор: Сергей Антропов
Сайт: https://devops.org.ru
This commit is contained in:
2025-10-22 15:42:08 +03:00
parent a9fcee13ef
commit c59edae00d

144
Makefile
View File

@@ -73,8 +73,152 @@ help: ## Показать справку по всем командам
@echo " $(CYAN)make preset-create-interactive$(RESET) - Интерактивное создание пресета" @echo " $(CYAN)make preset-create-interactive$(RESET) - Интерактивное создание пресета"
@echo " $(CYAN)make role-create-interactive$(RESET) - Интерактивное создание роли" @echo " $(CYAN)make role-create-interactive$(RESET) - Интерактивное создание роли"
@echo "" @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)" @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 .PHONY: menu
menu: check-whiptail check-init ## Интерактивное главное меню menu: check-whiptail check-init ## Интерактивное главное меню
@while true; do \ @while true; do \