kubernetes
This commit is contained in:
+8
-44
@@ -6,7 +6,6 @@ variables:
|
||||
DOCKER_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
|
||||
DOCKER_IMAGE_LATEST: $CI_REGISTRY_IMAGE:latest
|
||||
|
||||
# Build (Identique, je ne le change pas)
|
||||
build:
|
||||
stage: build
|
||||
image: docker:24
|
||||
@@ -22,53 +21,18 @@ build:
|
||||
- main
|
||||
- master
|
||||
|
||||
# Deploy CORRIGÉ
|
||||
deploy:
|
||||
stage: deploy
|
||||
image: alpine:latest
|
||||
image: dtzar/helm-kubectl:latest
|
||||
before_script:
|
||||
- apk add --no-cache openssh-client
|
||||
- eval $(ssh-agent -s)
|
||||
# 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
|
||||
- mkdir -p ~/.kube
|
||||
- echo "$KUBE_CONFIG" | base64 -d > ~/.kube/config
|
||||
- chmod 600 ~/.kube/config
|
||||
script:
|
||||
- |
|
||||
# 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
|
||||
|
||||
# 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
|
||||
- echo "🚀 Déploiement du Portfolio sur Kubernetes..."
|
||||
- kubectl apply -f k8s.yaml
|
||||
- kubectl rollout restart deployment/portfolio-app -n portfolio-ns
|
||||
- echo "✅ Déploiement terminé: http://portfolio.theval.ovh"
|
||||
only:
|
||||
- main
|
||||
- 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