diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index eeccd81..ac0f7dd 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,7 +6,7 @@ variables: DOCKER_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA DOCKER_IMAGE_LATEST: $CI_REGISTRY_IMAGE:latest -# Build et push de l'image Docker +# Build (Identique, je ne le change pas) build: stage: build image: docker:24 @@ -22,31 +22,37 @@ build: - main - master -# Déploiement sur le serveur (pull et redémarrage du container) +# Deploy CORRIGÉ deploy: stage: deploy image: alpine:latest before_script: - apk add --no-cache openssh-client - eval $(ssh-agent -s) - - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - + # Utilisation de printf pour éviter les soucis de saut de ligne + - printf "%s\n" "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - - mkdir -p ~/.ssh - chmod 700 ~/.ssh - ssh-keyscan -H $DEPLOY_SERVER >> ~/.ssh/known_hosts script: - | - ssh $DEPLOY_USER@$DEPLOY_SERVER << 'EOF' + # ATTENTION : EOF sans guillemets ici pour que GitLab injecte les variables + ssh $DEPLOY_USER@$DEPLOY_SERVER << EOF + set -e # Arrête le script si une commande échoue + # Créer le dossier dev s'il n'existe pas mkdir -p ~/dev cd ~/dev + echo "Déploiement de l'image : $DOCKER_IMAGE_LATEST" + # Login au registry GitLab - echo $CI_REGISTRY_PASSWORD | docker login $CI_REGISTRY -u $CI_REGISTRY_USER --password-stdin + echo "$CI_REGISTRY_PASSWORD" | docker login $CI_REGISTRY -u $CI_REGISTRY_USER --password-stdin # Pull la nouvelle image docker pull $DOCKER_IMAGE_LATEST - # Arrêter et supprimer l'ancien container + # Arrêter et supprimer l'ancien container (avec || true pour ne pas bloquer si inexistant) docker stop portfolio || true docker rm portfolio || true @@ -57,8 +63,10 @@ deploy: -p 3006:3000 \ $DOCKER_IMAGE_LATEST - # Nettoyage des anciennes images + # Nettoyage docker image prune -af --filter "until=24h" + + echo "Déploiement terminé avec succès !" EOF only: - main