/
monik
/
lab2_cicd_monitoring
Обзор
Документация
Войти
/
monik
/
lab2_cicd_monitoring
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Makefile
162 строки
8 KB
Kirill Kazarin
new monitoring version added
25 авг 2025, 21:29
25 авг 2025, 21:29
42bad69
Код
Авторство
О чём код?
# Makefile для лабораторной работы №2 - CI/CD и мониторинг # Python Flask приложение .PHONY: help install test test-watch test-ci test-coverage lint format type-check security clean build dev prod monitoring deploy-local ci cd info check-deps # Переменные PYTHON := python3.9 PIP := pip3 APP_NAME := lab2-cicd-monitoring DOCKER_IMAGE := $(APP_NAME):latest DOCKER_TAG := $(shell git rev-parse --short HEAD 2>/dev/null || echo "latest") PYTHON_PATH := export PATH="$$HOME/Library/Python/3.9/bin:$$PATH" && python3.9 # Цвета для вывода GREEN := \033[0;32m YELLOW := \033[1;33m RED := \033[0;31m NC := \033[0m # No Color help: ## Показать справку @echo "$(GREEN)Доступные команды:$(NC)" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " $(YELLOW)%-15s$(NC) %s\n", $$1, $$2}' check-deps: ## Проверить зависимости @echo "$(GREEN)Проверка зависимостей...$(NC)" @command -v $(PYTHON) >/dev/null 2>&1 || { echo "$(RED)Python не установлен$(NC)"; exit 1; } @command -v $(PIP) >/dev/null 2>&1 || { echo "$(RED)pip не установлен$(NC)"; exit 1; } @command -v docker >/dev/null 2>&1 || { echo "$(RED)Docker не установлен$(NC)"; exit 1; } @docker compose version >/dev/null 2>&1 || { echo "$(RED)Docker Compose не установлен$(NC)"; exit 1; } @echo "$(GREEN)Все зависимости установлены$(NC)" install: check-deps ## Установить Python зависимости @echo "$(GREEN)Установка Python зависимостей...$(NC)" $(PIP) install -r requirements.txt @echo "$(GREEN)Зависимости установлены$(NC)" dev-deps: check-deps ## Установить зависимости для разработки @echo "$(GREEN)Установка зависимостей для разработки...$(NC)" $(PIP) install -r requirements.txt @echo "$(GREEN)Зависимости для разработки установлены$(NC)" test: check-deps ## Запустить тесты @echo "$(GREEN)Запуск тестов...$(NC)" $(PYTHON_PATH) -m pytest tests/ -v test-watch: check-deps ## Запустить тесты в режиме наблюдения @echo "$(GREEN)Запуск тестов в режиме наблюдения...$(NC)" $(PYTHON_PATH) -m pytest tests/ --watch test-ci: check-deps ## Запустить тесты для CI/CD (только unit тесты) @echo "$(GREEN)Запуск тестов для CI/CD...$(NC)" mkdir -p test-results $(PYTHON_PATH) -m pytest tests/test_app.py --junitxml=test-results/junit.xml --cov=src.app --cov-report=xml test-coverage: check-deps ## Запустить тесты с отчетом о покрытии @echo "$(GREEN)Запуск тестов с отчетом о покрытии...$(NC)" $(PYTHON_PATH) -m pytest tests/ --cov=src.app --cov-report=html lint: check-deps ## Проверить качество кода @echo "$(GREEN)Проверка качества кода...$(NC)" $(PYTHON_PATH) -m flake8 src/ tests/ --max-line-length=100 --extend-ignore=E203,W503 $(PYTHON_PATH) -m black --check --diff src/ tests/ @echo "$(GREEN)Линтинг пройден$(NC)" format: check-deps ## Форматировать код @echo "$(GREEN)Форматирование кода...$(NC)" $(PYTHON_PATH) -m black src/ tests/ @echo "$(GREEN)Код отформатирован$(NC)" type-check: check-deps ## Проверить типы @echo "$(GREEN)Проверка типов...$(NC)" $(PYTHON_PATH) -m mypy src/ --ignore-missing-imports @echo "$(GREEN)Проверка типов пройдена$(NC)" security: check-deps ## Запустить проверки безопасности @echo "$(GREEN)Проверка безопасности...$(NC)" $(PYTHON_PATH) -m bandit -r src/ @echo "$(GREEN)Проверка безопасности завершена$(NC)" build: check-deps ## Собрать Docker образ @echo "$(GREEN)Сборка Docker образа...$(NC)" docker build -t $(DOCKER_IMAGE) . @echo "$(GREEN)Docker образ собран: $(DOCKER_IMAGE)$(NC)" dev: check-deps ## Запустить в режиме разработки @echo "$(GREEN)Запуск в режиме разработки...$(NC)" docker compose -f config/docker-compose.dev.yml up --build prod: check-deps ## Запустить в продакшн режиме @echo "$(GREEN)Запуск в продакшн режиме...$(NC)" @echo "$(YELLOW)Примечание: Приложение деплоится через CI/CD пайплайн$(NC)" @echo "$(YELLOW)Используйте 'make monitoring-agents' для запуска мониторинг-агентов$(NC)" monitoring-agents: check-deps ## Запустить мониторинг-агенты (Node Exporter + Cadvisor) @echo "$(GREEN)Запуск мониторинг-агентов...$(NC)" docker compose -f config/docker-compose.monitoring-agents.yml up -d monitoring: check-deps ## Запустить мониторинг (Prometheus + Grafana) @echo "$(GREEN)Запуск мониторинга...$(NC)" docker compose -f config/docker-compose.monitoring.yml up -d deploy-local: check-deps ## Локальный деплой @echo "$(GREEN)Локальный деплой...$(NC)" $(MAKE) build $(MAKE) prod clean: ## Очистить временные файлы @echo "$(GREEN)Очистка временных файлов...$(NC)" rm -rf __pycache__ *.pyc .pytest_cache coverage_html coverage.xml test-results/ .coverage find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true find . -name "*.pyc" -delete 2>/dev/null || true docker system prune -f @echo "$(GREEN)Очистка завершена$(NC)" ci: check-deps ## Запустить все проверки CI @echo "$(GREEN)Запуск всех проверок CI...$(NC)" $(MAKE) lint $(MAKE) type-check $(MAKE) test-ci $(MAKE) build @echo "$(GREEN)Все проверки CI пройдены$(NC)" cd: check-deps ## Запустить все проверки CD @echo "$(GREEN)Запуск всех проверок CD...$(NC)" $(MAKE) ci $(MAKE) prod @echo "$(GREEN)Все проверки CD пройдены$(NC)" info: ## Показать информацию о проекте @echo "$(GREEN)Информация о проекте:$(NC)" @echo " Название: $(APP_NAME)" @echo " Python: $(shell $(PYTHON) --version)" @echo " pip: $(shell $(PIP) --version)" @echo " Docker: $(shell docker --version)" @echo " Docker Compose: $(shell docker compose version)" @echo " Git: $(shell git --version 2>/dev/null || echo 'не установлен')" @echo " Текущая ветка: $(shell git branch --show-current 2>/dev/null || echo 'не git репозиторий')" @echo " Последний коммит: $(shell git log -1 --format='%h %s' 2>/dev/null || echo 'не git репозиторий')" # Дополнительные команды start: ## Запустить приложение локально @echo "$(GREEN)Запуск приложения локально...$(NC)" $(PYTHON_PATH) app.py stop: ## Остановить все контейнеры @echo "$(GREEN)Остановка всех контейнеров...$(NC)" docker compose -f config/docker-compose.dev.yml down docker compose -f config/docker-compose.monitoring-agents.yml down docker compose -f config/docker-compose.monitoring.yml down logs: ## Показать логи @echo "$(GREEN)Логи приложения:$(NC)" docker compose -f config/docker-compose.dev.yml logs -f web status: ## Показать статус контейнеров @echo "$(GREEN)Статус контейнеров:$(NC)" docker compose -f config/docker-compose.dev.yml ps docker compose -f config/docker-compose.monitoring-agents.yml ps docker compose -f config/docker-compose.monitoring.yml ps # Команда по умолчанию .DEFAULT_GOAL := help