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 "Authentification avec l'API de Portainer..." # Vérification des variables d'environnement pour les informations d'authentification if [ -z "$PORTAINER_USERNAME" ]; then echo "Erreur : PORTAINER_USERNAME non défini."; exit 1; fi if [ -z "$PORTAINER_PASSWORD" ]; then echo "Erreur : PORTAINER_PASSWORD non défini."; exit 1; fi if [ -z "$PORTAINER_URL" ]; then echo "Erreur : PORTAINER_URL non défini."; exit 1; fi if [ -z "$STACK_ID" ]; then echo "Erreur : STACK_ID non défini."; exit 1; fi if [ -z "$ENDPOINT_ID" ]; then echo "Erreur : ENDPOINT_ID non défini."; exit 1; fi # Authentification pour obtenir un JWT AUTH_RESPONSE=$(curl -s -k -X POST \ -H "Content-Type: application/json" \ -d "{\"Username\": \"$PORTAINER_USERNAME\", \"Password\": \"$PORTAINER_PASSWORD\"}" \ "https://$PORTAINER_URL/api/auth") # Extraire le token JWT de la réponse JWT_TOKEN=$(echo $AUTH_RESPONSE | jq -r .jwt) if [ "$JWT_TOKEN" == "null" ]; then echo "Erreur : Échec de l'authentification avec Portainer." exit 1 fi echo "Authentification réussie. Token JWT récupéré." echo "Déclenchement du redeploiement de la stack Git sur Portainer..." # Construire le corps de la requête JSON DATA="{\"endpointId\": $ENDPOINT_ID}" # Exécuter la requête pour redeployer la stack Git avec le JWT récupéré RESPONSE=$(curl -s -k -w "%{http_code}" -X PUT \ -H "Authorization: Bearer $JWT_TOKEN" \ -H "Content-Type: application/json" \ -d "$DATA" \ "https://$PORTAINER_URL/api/stacks/$STACK_ID/git/redeploy") # 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."