Aller au contenu
Culture DevOps medium
🔐 Alerte sécurité — Incident supply chain Trivy : lire mon analyse de l'attaque

Mettre à jour GitLab self-managed

9 min de lecture

GitLab publie une nouvelle version tous les mois (22 du mois). Les mises à jour mineures (ex: 18.1.0 → 18.2.0) s’appliquent en une commande apt/dnf. Les mises à jour majeures (ex: 17.x → 18.x) nécessitent de suivre un chemin d’upgrade précis — sauter des versions est une des causes les plus fréquentes de corruption de base de données.

Toujours sauvegarder avant de mettre à jour. Voir Sauvegarder et restaurer GitLab.

GitLab suit Semantic Versioning modifié :

18.10.1
│ │ └── Patch : correctifs de sécurité/bugs
│ └──── Minor (feature) : nouvelles fonctionnalités
└────── Major : changements majeurs, migrations DB complexes
TypeExempleRisqueDowntime
Patch18.10.0 → 18.10.1Très faibleNon (zero-downtime migrations)
Minor18.9.x → 18.10.xFaibleNon (en général)
Major17.x → 18.xÉlevé si saut de versionsPossible
Fenêtre de terminal
# Version courte
sudo gitlab-rake gitlab:env:info 2>/dev/null | grep "GitLab information" -A 5
# Ou directement
cat /opt/gitlab/version-manifest.json | python3 -c \
"import sys,json; d=json.load(sys.stdin); print(d['build_version'])"

Résultat :

18.10.1

C’est le cas le plus courant : 18.9.5 → 18.10.1, ou 18.10.0 → 18.10.1.

  1. Vérifier la version disponible

    Fenêtre de terminal
    apt-cache policy gitlab-ce
    gitlab-ce:
    Installed: 18.10.1-ce.0
    Candidate: 18.10.1-ce.0

    S’il n’y a pas de candidate plus récent, votre version est à jour.

  2. Créer une sauvegarde

    Fenêtre de terminal
    sudo gitlab-backup create

    Vérifiez que la sauvegarde est complète avant de continuer.

  3. Installer la mise à jour

    Fenêtre de terminal
    sudo apt-get update
    sudo apt-get install gitlab-ce

    GitLab lance automatiquement gitlab-ctl reconfigure à la fin du package. La mise à jour prend 5 à 15 minutes selon les migrations de base de données.

  4. Vérifier après la mise à jour

    Fenêtre de terminal
    # Version installée
    sudo gitlab-rake gitlab:env:info 2>/dev/null | head -20
    # Tous les services opérationnels
    sudo gitlab-ctl status
    # Migrations appliquées
    sudo gitlab-rake db:migrate:status 2>/dev/null | tail -10

Mise à jour majeure (changement de version majeure)

Section intitulée « Mise à jour majeure (changement de version majeure) »

Utilisez l’outil officiel : GitLab Upgrade Path Tool

Exemple : mise à jour de 16.3.x vers 18.10.x

16.3.x → 16.11.x → 17.3.x → 17.11.x → 18.10.x

Les versions intermédiaires (16.11.x, 17.3.x, 17.11.x) sont des versions requises (required stops). Vous devez vous arrêter à chaque étape et vérifier que les migrations sont complètes.

  1. Mettre à jour vers la première version intermédiaire

    Fenêtre de terminal
    # Installer une version spécifique (exemple : 16.11.10)
    sudo apt-get install gitlab-ce=16.11.10-ce.0

    Pour lister les versions disponibles :

    Fenêtre de terminal
    apt-cache madison gitlab-ce | head -20
  2. Attendre la fin des migrations background

    Certaines migrations s’exécutent en arrière-plan (Sidekiq) après le reconfigure. Attendez qu’elles soient toutes terminées avant de continuer :

    Fenêtre de terminal
    sudo gitlab-rake gitlab:db:validate_config

    Ou via l’interface : Admin Area → Monitoring → Background Migrations — attendez que la liste soit vide.

  3. Répéter pour chaque étape du chemin

    Fenêtre de terminal
    # Étape suivante
    sudo apt-get install gitlab-ce=17.3.x-ce.0
    # ... vérifier, puis continuer
  4. Installer la version cible

    Fenêtre de terminal
    sudo apt-get install gitlab-ce=18.10.1-ce.0
    # ou pour la dernière version disponible :
    sudo apt-get install gitlab-ce

C’est l’étape critique souvent sautée :

Fenêtre de terminal
# Via la console Rails
sudo gitlab-rails runner "puts Gitlab::BackgroundMigration.remaining"

Le résultat doit être 0 avant de passer à la version suivante.

Via l’interface web : Admin AreaMonitoringBackground Migrations

Pour installer une version précise (utile pour les chemins d’upgrade) :

Fenêtre de terminal
# Lister les versions disponibles
apt-cache madison gitlab-ce
# Installer une version précise
sudo apt-get install gitlab-ce=18.9.5-ce.0

Procédure de rollback :

  1. Arrêter GitLab

    Fenêtre de terminal
    sudo gitlab-ctl stop
  2. Réinstaller l’ancienne version

    Fenêtre de terminal
    # Remplacer par la version précédente
    sudo apt-get install gitlab-ce=18.9.5-ce.0
  3. Restaurer le backup

    Suivre la procédure de restauration complète.

Automatiser les mises à jour de sécurité (patches)

Section intitulée « Automatiser les mises à jour de sécurité (patches) »

Les mises à jour patch (18.10.0 → 18.10.1) sont généralement sans risque et peuvent être automatisées :

Fenêtre de terminal
# Ubuntu/Debian : unattended-upgrades avec sélection du dépôt
sudo apt-get install -y unattended-upgrades
# Ajouter le dépôt GitLab dans la whitelist
cat >> /etc/apt/apt.conf.d/50unattended-upgrades << 'EOF'
Unattended-Upgrade::Allowed-Origins {
"packages.gitlab.com/gitlab/gitlab-ce:noble";
};
EOF
SymptômeCause probableSolution
FATAL: Mixlib::ShellOut::ShellCommandFailedMigrations DB échouéessudo gitlab-rake db:migrate puis relancer
Service puma down après mise à jourIncompatibilité configsudo gitlab-ctl tail puma pour le détail
500 Whoops après reconfigureNouveau paramètre obligatoireVérifier gitlab.rb et les notes de release
Mise à jour bloquée sur “waiting for background migrations”Migrations background en coursAttendre ou forcer : gitlab-rails runner "..."
apt-get install gitlab-ce installe la mauvaise versionCache apt non rafraîchisudo apt-get update d’abord
  • Sauvegarder avant toute mise à jour — sans exception.
  • Les mises à jour patch et mineures sont en une commande, généralement sans interruption.
  • Les mises à jour majeures nécessitent un chemin d’upgrade précis — ne jamais sauter de version majeure.
  • Utilisez l’outil de chemin d’upgrade pour calculer votre trajectoire.
  • Attendez que les background migrations soient à zéro avant chaque étape d’un chemin d’upgrade.
  • Le rollback passe obligatoirement par la restauration d’un backup.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn