kubernetes
This commit is contained in:
+8
-44
@@ -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
|
|
||||||
|
|||||||
@@ -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
|
||||||
Reference in New Issue
Block a user