Gitolite pour gérer ses dépôts.
Gitolite est un outil permettant de gérer facilement des dépôts git à l'aide d'un utilisateur sur un serveur. Il fournit un accès pour plusieurs développeurs, sans donner un accès réel à un shell. Il utilise le système de clé ssh. Il est écrit par Sitaram Chamarty, dans le langage Perl, et inspiré de Gitosis. Gitolite permet d'attribuer des droits spécifique, à un utilisateur, comme la lecture, ((Donc le clone et fetch)) l'écriture (( push )) pour un dépôt. Il est aussi possible d'attribuer des droits pour des branches ou des tags, pratique dans un environnement d'entreprise, ou dans la gestion de certains projets, par exemple. Gitolite peut être installé sans les droits root, et sans logiciel supplémentaires, uniquement Git et Perl.
Pour l'installation, il y a plusieurs manière de procéder. Pour les utilisateurs de Debian, Ubuntu, Fedora, et certainement d'autres, il est possible d'utiliser le système de package de sa distribution. Il est aussi possible de lancer l'installation avec un script fourni par le projet, c'est la solution que j'utilise et c'est donc celle que je vais présenter.
Comme je l'ai dit plus haut, Gitolite peut être installé sans utiliser les droits root. J'ai donc préféré créer un utilisateur particulier pour gérer l'installation, c'est aussi l'utilisateur qui va gérer les dépôts Git. En utilisant pas le compte root, ça permettra de laisser à d'autres utilisateurs auquel on fait suffisamment confiance, un accès à la configuration des dépôts Git, sans pour autant qu'ils aient les droits root. On ajoutera donc leurs clés publiques dans /home/gitadmin/.ssh/authorized_keys.
adduser gitadmin
adduser git
Ensuite nous allons prendre l'identité de l'utilisateur nouvellement créé gitadmin, et nous allons générer une paire de clé, qu'on ajoutera à la liste des clés autorisé de git.
sudo su gitadmin
ssh-keygen -t dsa -b 1024
ssh-copy-id -i ~/.ssh/id_dsa.pub git@localhost
Il est maintenant possible de passer à l'installation. On commence par récupérer les sources de projet, en clonant le projet. On se déplace dans le projet et on lance le script d'installation.
git clone http://github.com/sitaramc/gitolite.git
cd gitolite/src
./gl-easy-install git localhost gitadmin
Les options qu'on passe en paramètre au script d'installation, signifie que l'utilisateur git hébergera les dépôts, le serveur ici on est connecté dessus donc localhost, et l'utilisateur gitadmin pour l'administration des dépôts.
Une série de question vous sera posées, vous pourrez laisser les options par défaut. Il sera aussi demandé une passphrase qu'on peut laisser vide.
Une fois l'installation terminé, on peut commencer à voir comment fonctionne la configuration. On se déplace dans le répertoire gitolite-admin, toujours avec l'utilisateur gitadmin bien-sûr. (( Utilisateur qui gère la configuration )) Pour ajouter un utilisateur, il faut ajouter sa clé publique dans le dossier keydir, commiter et ne pas oublier de pusher, car c'est au moment des hooks que la configuration prend effet.
cp /home/hobbestigrou/id_dsa.pub keydir/hobbestigrou.pub
git add keydir/hobbestigrou.pub
git commit
git push
Si tout comme moi, d'autres personnes on plusieurs clés pour le même utilisateur, il y a une syntaxe particulière à utiliser.
hobbestigrou@hobbyone.pub
hobbestigrou@work.pub
Le nom après le arobase peut-être ce que l'on souhaite.
Pour supprimer un utilisateur, il faut supprimer sa clé.
git rm keydir/exemple.pub
git commit
git push
Passons maintenant à la gestion des dépôts. Actuellement, deux dépôts sont déjà existant. Il y a bien entendu, le dépôt git-admin et un dépôt appelé testing. On constate que la syntaxe et assez claire et simple à comprendre. Si on ajoute le nom d'un dépôt qui n'existe pas encore, il sera créé automatiquement et placé dans le répertoire /home/git/repository.
repo exemple
RW+ = hobbestigrou
On a donc un dépôt exemple, avec l'utilisateur hobbestigrou qui a les droits en lecture, écriture et rewind permissions, c'est-à-dire la possibilités de supprimer des étapes du projet.
R: Droit en lecture uniquement,
RW: droit en lecture et écriture,
RW+: droit de lecture, écriture et rewind permission.
Il est aussi possible de gérer des groupes. Il existe déjà un groupe qui est @all, il est utilisé pour le dépôt testing, cela correspond donc à tous les utilisateurs.
@new_group = utilisateur1 utilisateur2 utilisateur3
Il sera maintenant possible d'utiliser @new_group.
Il est aussi possible d'ajouter uniquement des droits sur une branche d'un dépôt. Je n'ai pas encore eu ce besoin, pour plus d'information à ce sujet vous pouvez consulter un exemple de configuration https://github.com/sitaramc/gitolite/blob/master/conf/example.conf.
Pour récupérer un projet, ça utilise ssh.
git clone git@host.com:exemple.git
On clone le projet exemple sur host.com.
En conclusion, je trouve que c'est outil vraiment très pratique, agréable et puissant. Il est très facile à configurer et à maintenir. Mes cas d'utilisation sont assez simple, je l'utilise pour certains fichiers de configuration sensibles, certains projets dont je ne peux pas libérer le code source, tous mes projets que je mets aussi sur github ça me permet de commencer doucement mes projets sans que tout le monde ait une vue, lorsque c'est vraiment un embryon, articles et présentation pour conférences, et aussi pour des projets en collaboration avec d'autres développeurs.
Gitolite sur github