Publié le
06 mars 2016
tags : git auto-hebergement gitlab github
Coucou cher journal de toile,
Je souhaite me passer un peu de GitHub .
J'y vais en douceur, mais GitLab ♥ m'y aide bien, en
tant qu'alternative fort crédible.
J'ai voulu migrer mon
dépôt de rôles ansible de
GitHub vers
mon GitLab auto-hébergé .
Pour aller progressivement, et ne pas mettre tous mes œufs dans le même
panier, je souhaite conserver un miroir de mon dépôt sur GitHub , même si
je ne ferais désormais plus de push que via le GitLab.
Aperçu de la solution
On va utiliser tout simplement le hook git
post-receive pour exécuter un script à chaque push sur le dépôt géré par
GitLab. Ce script se chargera de faire un push du code reçu vers GitHub.
Il faudra évidement avoir autorisé notre GitLab à pusher en SSH sur le dépôt GitHub.
Côté GitLab
NB: J'ai installé GitLab via les
paquetages omnibus . Les dépôts sont
gérés par l'utilisateur Unix git et stockés dans
/var/opt/gitlab/git-data/ . Vous pouvez adapter ces valeurs à votre
installation.
Il faut commencer par créer une clef SSH à l'utilisateur git :
Les valeurs par défaut font l'affaire. Pour permettre l'automatisation, il faut
laisser la passphrase vide.
Ajouter un remote vers GitHub (substituer <namespace>
et <repo>
,
évidemment).
$ cd /var/opt/gitlab/git-data/<namespace>/<repo>.git
$ sudo -u git git remote add --mirror github
git@github.com:<namespace>/<repo>.git
Il faut ensuite créer le hook à proprement parler :
$ sudo -u git mkdir custom_hooks
$ sudo -u git echo "exec git push --quiet github &" >> post-receive
$ sudo -u git chmod 755 post-receive
Nous pouvons ensuite passer de l'autre côté du miroir…
Côté GitHub
Sur l'interface web de GitHub, pour le dépôt concerné, se rendre dans les Settings , puis Deploy
keys , et ajouter une deploy key , en y collant le contenu du fichier
/var/opt/gitlab/.ssh/id_rsa.pub issu du serveur GitLab , (cocher Allow
write Access , afin de donner au GitLab les droits de push ).
Tester le tout
Il y a une dernière étape à effectuer depuis le serveur GitLab : vérifier et
accepter la clef SSH du serveur de GitLab :
$ sudo -u git ssh git@github.com
The authenticity of host 'github.com (192.30.252.130)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.252.130' (RSA) to the list of known hosts.
PTY allocation request failed on channel 0
Hi namespace/repo! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
Cela permet de valider au passage que la clef est bien autorisée au niveau de GitHub.
Pour tester "en vrai", il suffit de réaliser un push vers le dépôt hébergé sur
GitLab , et vérifier que les nouveaux commits sont bien apparus sur le dépôt
GitHub .
Chez moi, ça
marche .
NB: les procédures détaillées n'utilisent que des outils standard, et sont
adaptables aisément avec des outils autres que GitHub et GitLab.
Ressources
commentaires