# Déployer via Git

# Introduction

L’objectif est de **déployer automatiquement** un site depuis **GitLab CI** vers un serveur distant en **SSH**.

À chaque modification sur la **branche défini** *(ex: main)*, la CI se connecte au serveur, récupère la dernière version du dépôt, puis effectue des opérations si nécessaire.


Cette méthode est **standard** et **recommandée** pour les projets de type associatif.


# Principe

Le déploiement repose sur une clé **SSH** **privée** stockée dans les **variables CI/CD** du projet **GitLab**.


Il vous faudra écrire le script yml de CI à la racine du projet. Puis le nommer **exactement** *“.gitlab-ci.yml“*.


Les variables CI/CD nécessaire sont :

| Variable | Descriptiion |
|----------|--------------|
| SSH_PRIVATE_KEY | Clé privée utilisée par la CI pour se co au serveur. |
| SSH_HOST | Hôte qui sera `perso3.runner.iiens.net` |
| SSH_USER | Utilisateur SSH, par exemple `chassagn2025` ou `logiique` |


# Exemple de `.gitlab-ci.yml`

```bash
stages:
  - deploy

deploy_production:
  stage: deploy
  only:
    - main # La branche que vous souhaitez suivre.

  before_script:
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - printf '%s\n' "$SSH_PRIVATE_KEY" > ~/.ssh/deploy_key
    - chmod 600 ~/.ssh/deploy_key
    - |
      cat > ~/.ssh/config <<EOF
      Host production
        HostName $SSH_HOST
        User $SSH_USER
        IdentityFile ~/.ssh/deploy_key
        IdentitiesOnly yes
        StrictHostKeyChecking no
      EOF

  script:
    - |
      ssh production << 'EOF'
        set -e
        cd /chemin/vers/html # Ici vous devez mettre le fichier dans lequel se trouve votre .git
        git fetch origin
        git reset --hard origin/main # La branche que vouss souhaitez suivre.
        # Ici vous pouvez lancer vos commandes
        # pour relancer le serveur si besoin.
      EOF

  environment:
    name: production
```