forgejo-deploy/Makefile

114 lines
4.3 KiB
Makefile
Raw Permalink Normal View History

# Makefile pour le déploiement Forgejo
.PHONY: help install check deploy setup prod clean test
PYTHON := python3
VENV := venv
ANSIBLE := ansible
ANSIBLE_PLAYBOOK := ansible-playbook
help: ## Affiche l'aide
@grep -E '^[a-zA-Z_-]+:.*?## .*$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $1, $2}'
install: ## Installe les prérequis (Ansible, collections, etc.)
@echo "📦 Installation des prérequis..."
@if [ -d "$(VENV)" ]; then \
echo "✓ Venv existant détecté"; \
else \
echo "🔧 Création du virtualenv..."; \
$(PYTHON) -m venv $(VENV); \
fi
@echo "📦 Installation des packages Python..."
@$(VENV)/bin/pip install --upgrade pip > /dev/null
@$(VENV)/bin/pip install ansible jinja2 pyyaml > /dev/null
@echo "✓ Prérequis Python/Ansible installés dans le venv"
@echo ""
@echo "💡 Pour utiliser Ansible : source $(VENV)/bin/activate"
@echo " Note: Go sera installé automatiquement sur le serveur distant lors du déploiement"
install-collections: ## Installe les collections Ansible nécessaires
@echo "📦 Installation des collections Ansible..."
@if [ ! -d "$(VENV)" ]; then \
echo "❌ Venv non trouvé. Exécutez 'make install' d'abord."; \
exit 1; \
fi
@$(VENV)/bin/ansible-galaxy collection install community.general
@$(VENV)/bin/ansible-galaxy collection install ansible.posix
@echo "✓ Collections installées"
check: ## Vérifie la syntaxe du playbook
@echo "🔍 Vérification de la syntaxe..."
@if [ ! -d "$(VENV)" ]; then \
echo "❌ Venv non trouvé. Exécutez 'make install' d'abord."; \
exit 1; \
fi
@$(VENV)/bin/ansible-playbook --syntax-check playbook.yml
@echo "✓ Syntaxe OK"
test-connection: ## Test la connexion SSH au serveur
@echo "🔍 Test de connexion..."
@if [ ! -f inventory.ini ]; then \
echo "❌ Fichier inventory.ini manquant. Exécutez 'make setup' d'abord."; \
exit 1; \
fi
@if [ ! -d "$(VENV)" ]; then \
echo "❌ Venv non trouvé. Exécutez 'make install' d'abord."; \
exit 1; \
fi
@$(VENV)/bin/ansible forgejo_servers -i inventory.ini -m ping
setup: ## Configure l'inventaire (demande IP et clé SSH)
@echo "🔧 Configuration de l'inventaire..."
@read -p "IP du serveur: " SERVER_IP; \
read -p "Chemin de la clé SSH [~/.ssh/id_rsa]: " SSH_KEY; \
SSH_KEY=$${SSH_KEY:-~/.ssh/id_rsa}; \
read -p "Utilisateur SSH [root]: " SSH_USER; \
SSH_USER=$${SSH_USER:-root}; \
echo "[forgejo_servers]" > inventory.ini; \
echo "forgejo_prod ansible_host=$$SERVER_IP ansible_user=$$SSH_USER ansible_ssh_private_key_file=$$SSH_KEY" >> inventory.ini; \
echo "" >> inventory.ini; \
echo "[forgejo_servers:vars]" >> inventory.ini; \
echo "ansible_python_interpreter=/usr/bin/python3" >> inventory.ini
@echo "✓ Inventaire créé: inventory.ini"
deploy: ## Déploie Forgejo en production
@echo "🚀 Déploiement de Forgejo..."
@if [ ! -f inventory.ini ]; then \
echo "❌ Fichier inventory.ini manquant. Exécutez 'make setup' d'abord."; \
exit 1; \
fi
@if [ ! -d "$(VENV)" ]; then \
echo "❌ Venv non trouvé. Exécutez 'make install' d'abord."; \
exit 1; \
fi
@$(VENV)/bin/ansible-playbook -i inventory.ini playbook.yml
deploy-ci: ## Déploie uniquement le pipeline CI/CD
@echo "🚀 Déploiement du pipeline CI/CD..."
@$(VENV)/bin/ansible-playbook -i inventory.ini playbook.yml --tags ci
prod: install install-collections setup test-connection deploy ## Installation complète et déploiement
clean: ## Nettoie les fichiers générés
@echo "🧹 Nettoyage..."
rm -f inventory.ini
rm -rf $(VENV)
find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
@echo "✓ Nettoyage terminé"
update-forgejo: ## Met à jour Forgejo vers la dernière version
@echo "🔄 Mise à jour de Forgejo..."
@$(VENV)/bin/ansible-playbook -i inventory.ini playbook.yml --tags update
backup: ## Crée une sauvegarde de Forgejo
@echo "💾 Sauvegarde de Forgejo..."
@$(VENV)/bin/ansible-playbook -i inventory.ini playbook.yml --tags backup
logs: ## Affiche les logs de Forgejo
@echo "📋 Récupération des logs..."
@$(VENV)/bin/ansible forgejo_servers -i inventory.ini -m shell -a "journalctl -u forgejo -n 50 --no-pager"
status: ## Vérifie le statut du service Forgejo
@echo "📊 Statut de Forgejo..."
@$(VENV)/bin/ansible forgejo_servers -i inventory.ini -m shell -a "systemctl status forgejo --no-pager"