kubernetes

This commit is contained in:
2026-01-22 22:55:35 +01:00
parent f4f100ae24
commit 7fc376b453
2 changed files with 68 additions and 44 deletions
+8 -44
View File
@@ -6,7 +6,6 @@ variables:
DOCKER_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA DOCKER_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
DOCKER_IMAGE_LATEST: $CI_REGISTRY_IMAGE:latest DOCKER_IMAGE_LATEST: $CI_REGISTRY_IMAGE:latest
# Build (Identique, je ne le change pas)
build: build:
stage: build stage: build
image: docker:24 image: docker:24
@@ -22,53 +21,18 @@ build:
- main - main
- master - master
# Deploy CORRIGÉ
deploy: deploy:
stage: deploy stage: deploy
image: alpine:latest image: dtzar/helm-kubectl:latest
before_script: before_script:
- apk add --no-cache openssh-client - mkdir -p ~/.kube
- eval $(ssh-agent -s) - echo "$KUBE_CONFIG" | base64 -d > ~/.kube/config
# Utilisation de printf pour éviter les soucis de saut de ligne - chmod 600 ~/.kube/config
- 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: script:
- | - echo "🚀 Déploiement du Portfolio sur Kubernetes..."
# ATTENTION : EOF sans guillemets ici pour que GitLab injecte les variables - kubectl apply -f k8s.yaml
ssh $DEPLOY_USER@$DEPLOY_SERVER << EOF - kubectl rollout restart deployment/portfolio-app -n portfolio-ns
set -e # Arrête le script si une commande échoue - echo "✅ Déploiement terminé: http://portfolio.theval.ovh"
# 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
# Pull la nouvelle image
docker pull $DOCKER_IMAGE_LATEST
# Arrêter et supprimer l'ancien container (avec || true pour ne pas bloquer si inexistant)
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
docker image prune -af --filter "until=24h"
echo "Déploiement terminé avec succès !"
EOF
only: only:
- main - main
- master - master
when: on_success
+60
View File
@@ -0,0 +1,60 @@
apiVersion: v1
kind: Namespace
metadata:
name: portfolio-ns
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: portfolio-app
namespace: portfolio-ns
spec:
replicas: 1
selector:
matchLabels:
app: portfolio
template:
metadata:
labels:
app: portfolio
spec:
containers:
- name: portfolio
image: registry.gitlab.com/val-team/public/portfolio:latest
imagePullPolicy: Always
ports:
- containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
name: portfolio-svc
namespace: portfolio-ns
spec:
selector:
app: portfolio
ports:
- protocol: TCP
port: 80
targetPort: 3000
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: portfolio-ingress
namespace: portfolio-ns
spec:
rules:
- host: portfolio.theval.ovh
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: portfolio-svc
port:
number: 80