diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ac0f7dd..c0f477f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -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 diff --git a/k8s.yaml b/k8s.yaml new file mode 100644 index 0000000..f30ceed --- /dev/null +++ b/k8s.yaml @@ -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