Gogs : mettre en place un miroir vers GitHub
Pour ceux qui ne connaissent pas, Gogs est un service Git auto-hébergé pour gérer vos dépôts de codes. J’avais tenté l’installation du très puissant Gitlab mais ce dernier consomme beaucoup trop de ressources pour qu’il reste un candidat sur mon micro-serveur. Après avoir un peu souffert à l’installation (je détaille pas mais je l’ai cherché), j’ai commencé réellement à bosser avec récemment. Et pour certains des dépôts, je souhaite qu’il soient recopiés sur GitHub, si possible automatiquement. Et c’est assez facile à mettre en place en fait.
Rapide contexte
Gogs est écrit en langage go. Son installation et sa configuration se veulent simplifiées, mais j’ai complexifié le truc « exprès » pour m’exercer un peu sur Postgresql. Il est même possible de l’installer via Docker, et il n’est pas impossible que je déporte mon installation actuelle ou que je la refasse pour basculer sur le cluster Swarm que j’essaie désespérément de monter.
La spécificité c’est donc qu’il est auto-hébergé, nécessairement privé. Mais j’ai également un compte GitHub, et si on pouvait faire en sorte de pousser automatiquement sur GitHub quand on pousse sur Gogs, c’est cool. Sans avoir besoin de la puissance de l’option intégration continue d’un Gitlab beaucoup trop lourd pour mes besoins persos, on a quand même les hooks, qui sont une fonctionnalité de Git.
Quelques étapes simples
En premier lieu, configurer l’accès SSH entre l’instance Gogs et Github. Pour ça, on se connecte sur gogs, et on bascule sur l’utilisateur git qui est celui utilisé par le logiciel. Il faut ensuite se créer une clé SSH, pour ma part je n’ai pas configuré de passphrase :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
git@gogs:~/.ssh$ man ssh-keygen git@gogs:~/.ssh$ ssh-keygen -t ed25519 Generating public/private ed25519 key pair. Enter file in which to save the key (/home/git/.ssh/id_ed25519): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/git/.ssh/id_ed25519. Your public key has been saved in /home/git/.ssh/id_ed25519.pub. The key fingerprint is: 4d:d5:cb:a4:9f:0a:93:1b:13:9c:d3:8d:23:3e:a6:11 git@gogs The key's randomart image is: +--[ED25519 256]--+ | .. | | . o | | ..o * . | | Eo* = + | | So.= o . | | . X o | | + B . | | . . . | | | +-----------------+ git@gogs:~/.ssh$ cat id_ed25519.pub ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBeo5HVJCBAggpcSh9RPgUMgg0710etf21sNChjllJyf git@gogs |
On ajoute ensuite cette clé sur son compte GitHub via l’interface web :
Tant qu’on est sur GitHub, profitons-en pour créer un dépôt vide, avec le nom qu’un veut. Par feignantise, j’ai utilisé le même que celui du dépôt privé. Attention, il faut absolument qu’il soit vide de tout, il ne faut donc pas sélectionner de licence ou de README.md dans le formulaire de création, sinon techniquement il y aura déjà un commit et ça sera l’enfer pour l’exploiter.
On teste maintenant la connexion depuis Gogs :
1 2 3 4 5 6 7 8 |
git@gogs:~/.ssh$ ssh git@github.com The authenticity of host 'github.com (192.30.253.112)' 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.253.112' (RSA) to the list of known hosts. PTY allocation request failed on channel 0 Hi seboss666! You've successfully authenticated, but GitHub does not provide shell access. Connection to github.com closed. |
Parfait. Rendons-nous maintenant sur l’interface web de Gogs pour y configurer un hook. Pour cela, il faut sélectionner l’un de vos dépôts, se rendre dans les paramètres de ce dépôt, il y a un menu Git hooks :
Il faut modifier le post-receive, qui est vide pour l’instant, et ajouter les lignes suivantes :
1 2 |
#!/bin/bash git push --mirror git@github.com:seboss666/misc-scripts.git |
On enregistre, et… c’est tout. Lors de votre prochain push sur le dépôt, il va ensuite automatiquement renvoyer les modifications sur GitHub :
1 2 3 4 5 6 7 8 9 10 11 |
[seboss666@seboss666-ltp ~/dev/misc-scripts (master) ]$ git push origin master Décompte des objets: 3, fait. Delta compression using up to 4 threads. Compression des objets: 100% (3/3), fait. Écriture des objets: 100% (3/3), 403 bytes | 403.00 KiB/s, fait. Total 3 (delta 1), reused 0 (delta 0) remote: Warning: Permanently added the RSA host key for IP address '192.30.253.113' to the list of known hosts. remote: To git@github.com:seboss666/misc-scripts.git remote: * [new branch] master -> master To ssh://gogs.seboss666.ovh/Seboss666/misc-scripts f2d9016..47ef107 master -> master |
Voilà, maintenant, je vais pouvoir reprendre petit à petit les différentes broutilles que j’ai pu vous balancer au fil des années sur le blog et les ajouter là-dedans. En passant, l’utilisation via mon rebond SSH fonctionne très bien pour taper sur mon instance Gogs 🙂
PS : J’indique qu’il ne faut pas ajouter la licence sur le dépôt créé sur GitHub, je l’avais fait sur Gogs, et GitHub a détecté le fichier et affiche correctement la licence sur la page du dépôt 😉