canguidev/.gitlab-ci.yml

81 lines
2.4 KiB
YAML

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."