CICD server

This commit is contained in:
2026-01-22 18:44:16 +01:00
parent 8740a44cd8
commit 176bedd0ba
+66
View File
@@ -0,0 +1,66 @@
stages:
- build
- deploy
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:
stage: build
image: docker:24
services:
- docker:24-dind
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
script:
- docker build -t $DOCKER_IMAGE -t $DOCKER_IMAGE_LATEST .
- docker push $DOCKER_IMAGE
- docker push $DOCKER_IMAGE_LATEST
only:
- main
- master
# Déploiement sur le serveur (pull et redémarrage du container)
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 -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan -H $DEPLOY_SERVER >> ~/.ssh/known_hosts
script:
- |
ssh $DEPLOY_USER@$DEPLOY_SERVER << 'EOF'
# Créer le dossier dev s'il n'existe pas
mkdir -p ~/dev
cd ~/dev
# Login au registry GitLab
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
docker stop portfolio || true
docker rm portfolio || true
# Lancer le nouveau container
docker run -d \
--name portfolio \
--restart unless-stopped \
-p 3006:3000 \
$DOCKER_IMAGE_LATEST
# Nettoyage des anciennes images
docker image prune -af --filter "until=24h"
EOF
only:
- main
- master
when: on_success