diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 31bfcd9..543687d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -26,7 +26,7 @@ deploy-job: - deploiement script: - | - set -x + set -e echo "Déploiement sur Portainer..." echo "Utilisation du token API de Portainer..." @@ -34,26 +34,46 @@ deploy-job: 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 (sauf les sensibles) + # 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..." - RESPONSE=$(curl -v -X PUT \ + # 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 '{"Prune": true}' \ - https://$PORTAINER_URL/api/stacks/$STACK_ID/deploy 2>&1) + -d "$DATA" \ + "https://$PORTAINER_URL/api/stacks/$STACK_ID/update?endpointId=$ENDPOINT_ID") - HTTP_CODE=$(echo "$RESPONSE" | grep "< HTTP/" | awk '{print $3}') - - echo "Réponse de l'API :" - echo "$RESPONSE" + # 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