Migrer de Bitbucket à GitLab en conservant l'historique

 06 avril 2020   Stéphane

Catégorie / Mot clefs: Code / Code, Gitlab.


Les exécuteurs partagés Bitbucket ou GitLab sont plutôt lents et notre utilisation de la partie CI/CD étant plutôt intense. Nous avons décidé d'héberger notre propre instance GitLab, car nous en hébergions et opérions déjà pour quelques-uns de nos clients.

Voici donc comment nous avons procéder pour conserver l'historique des contributions, à savoir les pull-requests et leurs commentaires, les issues et les wikis.

Autoriser l'accès à Bitbucket

Première étape pour importer des projets venant de Bitbucket Cloud, il faut créer une application GitLab dans la section Gestion des accès > OAuth des paramètres Bitbucket :

ajouter un utilisateur d'OAuth

Avec les bons droits :

ajouter un utilisateur d'OAuth - permissions

Puis, il suffit d'ajouter la clé et le secret à la configuration GitLab (/etc/gitlab/gitlab.rb) :

gitlab_rails['omniauth_enabled'] = true
gitlab_rails['omniauth_providers'] = [
  {
           "name" => "bitbucket",
           "app_id" => "****",
           "app_secret" => "****",
           "url" => "https://bitbucket.org/"
         }
]

Avant de le reconfigurer, ce qui le redémarrera compte tenu des modifications :

gitlab-ctl reconfigure

Migrer vos projets

Pour simplifier l'opération de migration, vu que l'import conserve les pull-requests en cours ainsi que les commentaires actifs. Vous pouvez choisir une date/heure pour migrer les projets, plutôt que d'attendre que toutes les pull-requests soient fusionnées.

Pour être certain qu'il n'y ait pas de modifications perdues pendant le temps de la migration. Coupez les droits d'écritures sur Bitbucket. Dans notre cas, c'est très simple, puisque nous gérons les accès par groupes d'utilisateurs (Administrateurs, Mainteneurs, Développeurs, Rapporteurs). Il nous suffit de mettre tous les groupes à la permission lire dans la section Gestion des accès > Groupes d'utilisateur des paramètres Bitbucket :

couper les droits en écriture

Lançons les imports, ajoutez un projet, onglet import a project, choisissez Bitbucket Cloud :

ajouter un projet

Là, Bitbucket vous demande de confirmer l'autorisation d'accès à votre compte en listant les autorisations. Puis vous laisse choisir le ou les projets compatibles (git) à migrer.

confirmer l'accès à votre compte

Si les dépôts sont volumineux, avec beaucoup d'historique, l'import peut prendre quelques minutes. Pendant ce temps là, créez les utilisateurs et/ou attribuez les droits utilisateurs, de préférence, en passant par les groupes ou directement sur les projets si vous abez besoin de plus de granularité.

Il ne reste plus qu'à modifier les remotes dans les configurations git locales :

# renommez l'ancien remote
git remote rename origin bitbucket

# ajoutez le nouveau remote
git remote add origin git@hexack.nuajik.io:<group>/<project>.git

# mettez à jour *les* branches
git branch <branch> -u origin/master

Et commencer à utiliser GitLab, validez les merge-requests, ajoutez les intégrations nécessaires, écrivez votre .gitlab-ci.yml, etc.