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:
144
Makefile
144
Makefile
@@ -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 \
|
||||||
|
|||||||
Reference in New Issue
Block a user