Gitlab (Sources) To Gitlab-Omnibus

Migration

 

Cet article permet d’envisager la migration des données d’un Gitlab installé avec les sources sur une instance de Gitlab avec Omnibus.
Dans notre cas de figure, nous avions une instance Gitlab avec MySQL, et nous souhaitions migrer toutes nos données sur Omnibus sachant que le type de base de données cible était PostgreSQL.

Nous estimons que l’installation du nouveau Gitlab au moins avec les sources a été fait : https://about.gitlab.com/downloads/#debian8

Sur l’ANCIEN serveur gitlab

Arrêt du service Gitlab

service gitlab stop

Sauvegarde de l’environnement et création d’un répertoire temporaire

cd /home/git/gitlab
sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production
mkdir /tmp/backups/postgresql/
mv /home/git/gitlab/tmp/backups/<BACKUP>.tar /tmp/backups/postgresql/

Dump de la base  de données en la rendant compatible avec PostgreSQL

sudo -u git -H mysqldump --compatible=postgresql --default-character-set=utf8 -r gitlabhq_production.mysql -u <user> gitlabhq_production -p<password>

Récupération du repository git pour la conversion du dump

sudo -u git -H git clone https://github.com/gitlabhq/mysql-postgresql-converter.git -b gitlab

Conversion du dump et modification des indexes

mkdir db
sudo -u git -H python mysql-postgresql-converter/db_converter.py gitlabhq_production.mysql db/database.sql
sudo -u git -H ed -s db/database.sql < mysql-postgresql-converter/move_drop_indexes.ed

A ce stade, il faut vérifier si le fichier databases.sql contient en début de ligne au moins les lignes suivantes :

-- Converted by db_converter
START TRANSACTION;
SET escape_string_warning= 'off';
SET standard_conforming_strings = 'off';
SET backslash_quote = 'on';
SET CONSTRAINTS ALL DEFERRED;

Ainsi que les lignes contenant les DROP sont de cette forme là :

[...]
DROP INDEX IF EXISTS "index_audit_events_on_author_id";
[...]

Extraction et réinsertion du database.sql dans le fichier de sauvegarde

cd /tmp/backups/postgresql/ && tar -xf <timestamp>_gitlab_backup.tar
rm -f db/database.sql.gz
cd /tmp/backups/postgresql/db/ && gzip -c database.sql > database.sql.gz

Reconstruction de l’archive tar

sudo -u git -H tar rf <NEWBACKUP>_gitlab_backup.tar artifacts.tar.gz backup_information.yml builds.tar.gz db lfs.tar.gz repositories uploads.tar.gz

Si les deux instances sont sur deux serveurs différents, procédez à son transfert.

Sur le NOUVEAU serveur gitlab

Insertion du backup dans le nouveau gitlab

cd /var/opt/gitlab/backups/ && sudo gitlab-rake gitlab:backup:restore BACKUP=<timestamp>

Reconfiguration et redémarrage des services

sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
sudo gitlab-runner restart

Optionnel : Gitlab-runner

L’enregistrement doit être fait avec gitlab-runner pour fonctionner.

gitlab-ci-multi-runner register

Une URL et un Token sera demande, ils sont disponible sur l’interface du nouveau Gitlab dans /admin/runners

Redémarrage du service Gitlab-runner

service gitlab-runner restart

A ce stade, tout a été réimporté, les utilisateurs, la base de données, les projets, les répository…

Nicolas Blattmann

Laisser un commentaire