113 lines
4.3 KiB
Makefile
113 lines
4.3 KiB
Makefile
# 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"
|