Aller au contenu
English
Compte : non connecté, synchronisation possible Mon apprentissage
Selectionner le thème
English

Mettre à jour GitLab self-managed

  • 20 min

Par mis à jour le

Améliorer cette page

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 expose à des migrations en échec et à une base de données inutilisable.

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

Cette page porte sur l'instance GitLab elle-même : le GitLab Runner est un paquet distinct, présenté dans Maîtriser GitLab Runner.

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) »

Une version majeure ne se saute jamais d'un coup : GitLab impose des versions requises intermédiaires, parce que chacune porte des migrations de base de données que la suivante suppose terminées. La procédure tient en trois gestes : calculer le chemin, l'appliquer palier par palier, et attendre la fin des migrations en arrière-plan avant de passer au palier suivant.

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-psql -c "SELECT job_class_name, table_name, column_name, job_arguments FROM batched_background_migrations WHERE status NOT IN(3, 6);"

    Zéro ligne retournée signifie que toutes les migrations par lots sont terminées. À partir de GitLab 18.9, sudo gitlab-rake gitlab:background_migrations:list les liste pour toutes les bases (gitlab:background_migrations:status avant 18.9).

    Ou via l'interface : Admin → Monitoring → Background migrations, onglets Queued et Finalizing : attendez qu'ils soient vides.

  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 la plus souvent sautée : passer au palier suivant alors que des migrations par lots tournent encore. La vérification est celle de l'étape 2 ci-dessus : la requête sur batched_background_migrations doit rendre zéro ligne, ou gitlab:background_migrations:list (à partir de 18.9) ne plus rien lister, et les onglets Queued et Finalizing de l'interface doivent être vides.

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

La plupart des échecs de mise à jour se lisent dans les journaux du service fautif (sudo gitlab-ctl tail <service>) et viennent soit d'une migration de base interrompue, soit d'un paramètre de gitlab.rb devenu obligatoire. Le tableau relie chaque symptôme à sa cause la plus probable.

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 (voir Configuration initiale) et les notes de release
Mise à jour bloquée sur "waiting for background migrations"Migrations background en coursAttendre la fin des migrations (voir « Vérifier les migrations background »)
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 projet vous est utile ?

Les guides, formations, quiz et labs restent gratuits. Si vous les utilisez régulièrement, vous pouvez contribuer à leur maintenance et à leur développement.

Devenir membre de soutien (nouvel onglet) Soutenir une fois (nouvel onglet) En savoir plus

Suivez aussi le projet sur LinkedIn