stages: - build - test - deploy build-job: stage: build tags: - deploiement script: - echo "Compilation du code..." # Ajoutez vos commandes de build ici test-job: stage: test tags: - deploiement script: - echo "Exécution des tests..." # Ajoutez vos commandes de test ici deploy-job: stage: deploy tags: - deploiement script: - | set -e echo "Déploiement sur Portainer..." echo "Utilisation du token API de Portainer..." # Vérification des variables d'environnement if [ -z "$PORTAINER_API_KEY" ]; then echo "Erreur : PORTAINER_API_KEY non définie."; exit 1; fi if [ -z "$PORTAINER_URL" ]; then echo "Erreur : PORTAINER_URL non définie."; exit 1; fi if [ -z "$STACK_ID" ]; then echo "Erreur : STACK_ID non définie."; exit 1; fi if [ -z "$ENDPOINT_ID" ]; then echo "Erreur : ENDPOINT_ID non définie."; exit 1; fi # Affichage des variables (non sensibles) echo "PORTAINER_URL : $PORTAINER_URL" echo "STACK_ID : $STACK_ID" echo "ENDPOINT_ID : $ENDPOINT_ID" echo "Lecture du fichier docker-compose.yml..." # Vérifier que docker-compose.yml existe if [ ! -f docker-compose.yml ]; then echo "Erreur : Le fichier docker-compose.yml n'existe pas." exit 1 fi # Lire le contenu du fichier docker-compose.yml STACK_FILE_CONTENT=$(cat docker-compose.yml) # Échapper les nouvelles lignes pour le JSON STACK_FILE_CONTENT_JSON=$(echo "$STACK_FILE_CONTENT" | awk '{printf "%s\\n", $0}') # Construire le corps de la requête JSON DATA="{\"stackFileContent\":\"$STACK_FILE_CONTENT_JSON\"}" echo "Déploiement de la stack sur Portainer..." # Exécuter la requête pour mettre à jour la stack RESPONSE=$(curl -s -k -w "%{http_code}" -X POST \ -H "Authorization: Bearer $PORTAINER_API_KEY" \ -H "Content-Type: application/json" \ -d "$DATA" \ "https://$PORTAINER_URL/api/stacks/$STACK_ID/update?endpointId=$ENDPOINT_ID") # Extraire le code HTTP de la réponse HTTP_CODE="${RESPONSE: -3}" BODY="${RESPONSE::-3}" if [ "$HTTP_CODE" != "200" ]; then echo "Erreur : Échec du déploiement. Code HTTP : $HTTP_CODE" echo "Réponse de l'API : $BODY" exit 1 fi echo "Déploiement terminé avec succès."