K-7.ch

I'll be back

Serveur Git avec Gitolite



La semaine dernière, j'ai eu l'occasion de jouer un peu avec un outils fort sympatique: Gitolite. Il permet de transformer un ordinateur avec un serveur SSH en serveur Git et de gérer les accès de plusieurs développeurs sur plusieurs dépôts Git.

Contexte

Git est un excellent gestionnaire de version. L'un de ses points forts est de permettre de travailler de façon non centralisée. Chaque développeur possède une copie locale du dépôt et peut y faire des commits sans être connecté à un serveur. Pour échanger ses modifications avec d'autres développeurs, il est possible d'envoyer ces dernières par e-mail. Git possède des options pour exporter ses commits (ou des branches entières) avant envoi et de les réimporter à leur réception.

Mais si envoyer ses modifications par e-mail fonctionne bien pour des contributions intermittentes, cette méthode devient lourde quand on travail en équipe et qu'on apporte beaucoup de modifications à son code. Par chance, il suffit aux développeurs d'avoir un accès SSH commun à un ordinateur et d'y installer Git pour pouvoir s'en servir comme "serveur de référence". Chacune et chacun peut y "pousser" ses modifications et "tirer" celles des autres.

Mais la solution ci-dessus amène son lot de problèmes: Comment gérer la création de dépôts? Comment gérer les droits d'accès? Comment éviter de donner l'accès à un shell à tout le monde? C'est à ces questions que Gitolite répond. Et plutôt bien.

Installation de Gitolite

Cette opération se fait en deux étapes:

  • Installer de paquet Gitolite
  • Configurer un compte utilisateur sur le serveur pour accueillir Gitolite

Pour la première étape, si vous êtes sur Fedora, tapez la commande:

sudo dnf install -y gitolite3

Si vous êtes sur CentOS avec le dépôt EPEL installé, préférez:

sudo yum install -y gitolite3

Et si vous êtes sur Debian, tapez la commande:

sudo apt-get install gitolite3

Pour la seconde étape, on va commencer par créer un utilisateur qui va accueillir les dépôts Git:

sudo useradd git

Ensuite, on copie la clé SSH publique de l'administrateur de Gitolite dans le dossier home de ce nouveau compte:

sudo install -o git -g git </chemin/vers/ma/clé.pub> /home/git/<utilisateur>.pub

Remplacez </chemin/vers/ma/clé.pub> par le chemin vers votre clé publique et <utilisateur> par votre nom utilisateur

Avant dernière action, lancez la configuration de Gitolite pour l'utilisateur git:

sudo -u git gitolite setup -pk /home/git/<utilisateur>.pub

Enfin, supprimez la clé SSH publique que n'est plus nécessaire:

sudo rm /home/git/<utilisateur>.pub

Pour tester si l'installation s'est bien passée, il faut un compte utilisateur possédant la clé SSH privée liée à la clé publique utilisée plus haut. Depuis ce compte, exécutez la commande:

ssh git@<mon_serveur> info

<mon_serveur> sera l'adresse de l'ordinateur hébergeant Gitolite.

Vous devriez avoir la réponse suivante:

hello user, this is git@my_server running gitolite3 on git 2.9.4

R W  gitolite-admin
R W  testing

C'est fait, vous avez un Gitolite tout frais et fonctionnel.

Administration

Toute la configuration de Gitolite se passe depuis le dépôt gitolit-admin de votre installation.

Pour commencer, clonez le:

git clone git@<mon_serveur>:gitolite-admin

(N'oubliez pas de remplacer <mon_serveur> par l'adresse du vôtre)

Dans le dépôt fraîchement cloné, on retrouve cette arborescence:

gitolite-admin/
├── conf
│   └── gitolite.conf
└── keydir
    └── bob.pub

Dans le dossier keydir se trouve la clé SSH publique de toutes celles et ceux qui auront accès à votre serveur Gitolite. Le nom de ces fichiers est important. Il suit la forme utilisateur.pub. L'utilisateur indiqué dans le nom du fichier sera repris dans la configuration des dépôts git et de leurs politiques d'accès.

Dans le fichier gitolite.conf se trouve la liste des dépôts ainsi que leurs règles d'accès.

La syntaxe du fichier gitolite.conf ressemble à ceci:

repo gitolite-admin
    RW+     =   bob

repo george
    RW+     =   bob
    R       =   alice

Pour chaque dépôt on retrouve le mot clé repo suivit du nom du dépôt. Les lignes qui suivent indiquent une règle d'accès associé à un nom d'utilisateur.

Les règles d'accès peuvent être:

  • R: Accès en lecture (clone, fetch, …)
  • W: Accès en écriture (push)
  • +: Opérations de correction (rewinds ou deletes)

D'autres règles d'accès peuvent être trouvées sur le manuel officiel.

Il est possible de créer des groupes d'utilisateurs ou de dépôts avec la syntaxe:

@staff              =   bob alice

Vous pouvez ensuite utiliser ce groupe dans votre configuration en invoquant son nom (par exemple @staff). Mais évitez de prononcer ce nom trois fois.

N'oubliez pas de "commiter" vos changements et de les pousser pour qu'ils soient pris en compte par Gitolite.

Utilisation

Chaque utilisateur ayant accès à votre serveur Gitolite peut savoir à quels dépôts il a accès et ce qu'il a le droit d'y faire. Pour cela, il lui suffit d'exécuter depuis son terminal:

ssh git@<mon_serveur> info

Voici un exemple de ce qu'il peut recevoir en réponse:

hello bob, this is git@my_server running gitolite3 on git 2.9.4

R W  gitolite-admin
R W  george

Ensuite, il suffit au développeur de cloner le dépôt dont il a besoin, de "commiter" puis de pousser ses changements.

L'URL d'un dépôt ressemble à ceci: git@mon_server:mon_dépôt

Essayons, par exemple, de cloner george:

git clone git@mon_serveur:george

Voilà, reste plus qu'à se mettre au boulot.

Aller plus loin

Quelques liens utiles: