Dépôts git avec Gitolite¶
Gitolite est un gestionnaire de dépôts git qui fonctionne exclusivement en ligne de commande. La documentation sur https://gitolite.com/gitolite/index.html est bien fournie et très claire pour l’administrateur. La présente page a pour but de donner quelques clés sur l’utilisation de gitolite tel que configuré sur ImmaeEu.
Authentification¶
L’accès aux dépôts se fait uniquement avec l’aide d’une clé ssh, dont il
faudra me communiquer la clé publique. Après cela, gitolite sera
accessible via ssh sur gitolite@git.immae.eu
Principes d’utilisation¶
L’accès à gitolite@git.immae.eu
peut se gérer soit via git (push,
clone, pull), soit via ssh. Dans ce deuxième cas, on peut en général
utiliser la commande help
ou le flag --help
pour plus
d’information. Par exemple pour lister les commandes disponibles
(présentées également dans la suite du document):
ssh gitolite@git.immae.eu help
Ou pour doner une aide sur l’utilisation de la commande perms (cf Gestion des permissions du dépôt):
ssh gitolite@git.immae.eu perms --help
Clonage de dépôt¶
Selon l’accès demandé, vous aurez les droits sur les dépôts à cloner, auquel cas il suffit de les cloner avec la commande git:
git clone gitolite@git.immae.eu:path/to/repository
Si vous avez en plus votre propre espace, vous avez également accès à
tout l’espace gitolite@git.immae.eu:perso/user_id/chemin/arbitraire
,
où user_id
est l’identifiant qui vous a été attribué. Dans ce cas,
les dépôts sont créés à la volée lorsque vous clonez un nouveau dépôt
(qui sera vide) ou pushez votre nouveau code.
Lister les dépôts¶
Il est possible de lister les dépôts auxquels vous avez accès avec la
commande ssh gitolite@git.immae.eu
. Cela va lister tous les dépôts
ainsi que les accès autorisés (C
pour création pour les chemins
arbitraires, R
pour lecture seule, R W
pour lecture et écriture)
Gestion des permissions du dépôt¶
Il y a quelques paramètres qui sont modifiables pour permettre l’accès aux dépôts à des personnes tièrces. Pour une gestion plus fine, il faudra me consulter.
Lister les permissions associées à un dépôt:
ssh gitolite@git.immae.eu perms path/to/repository -l
Autoriser un utilisateur à lire le dépôt:
ssh gitolite@git.immae.eu perms path/to/repository + READERS user_id
Autoriser un utilisateur à écrire dans le dépôt (mais sans push force):
ssh gitolite@git.immae.eu perms path/to/repository + WRITERS user_id
Autoriser un utilisateur à écrire dans le dépôt (y compris push force):
ssh gitolite@git.immae.eu perms path/to/repository + WRITERSPLUS user_id
Retirer les droits : même commande avec
-
au lieu de+
Cas particulier : Afin de faciliter la collaboration, un utilisateur
user_id
qui a au moins les droits en lecture sur un dépôt aura en
plus la possibilité de pousser des branches avec un nom de la forme
perso/user_id/nom_arbitraire
.
Utilisateurs particuliers :
Immae
: c’est moibuildbot
: si un dépôt est associé à des déploiements automatiques, c’est l’utilisateur qui aura besoin de pouvoir au moins lire le dépôt (voir Intégration continue avec Buildbot).gitweb
: c’est l’utilisateur qui permet d’autoriser l’affichage sur https://git.immae.eu (voir Accès public avec cgit)daemon
: permet de cloner sans authentification avecgit://git.immae.eu/path/to/repository
@nixops
: Normalement peu utile, il donne accès au dépôt à tous les administrateurs d’ImmaeEu.naemon
: Normalement inutile, il donne accès au dépôt à l’outil de monitoring.
Inviter des collaborateurs¶
Note
Cette section est un ajout spécifique à ImmaeEu.
Il est possible d’inviter des collaborateurs en intégrant leur clé
directement. Ces invitations se gèrent avec la commande invite
:
Ajouter un utilisateur
foo
avec la clé identifiée parbar
:cat foo_id_rsa.pub | ssh gitolite@git.immae.eu invite add foo@bar
Supprimer l’utilisateur:
ssh gitolite@git.immae.eu invite del foo@bar
Lister les utilisateurs invités:
ssh gitolite@git.immae.eu invite
Une fois cet utilisateur invité, il aura un compte sous la forme
votre_login-invite-foo
. Il suffit ensuite d’attribuer un rôle à cet
utilisateur (cf Gestion des permissions du dépôt).
L’utilisateur sera ensuite en mesure d’ajouter ou supprimer de lui-même de nouvelles clés ssh en suivant la procédure habituelle (cf Gestion de clés ssh).
Paramètres du dépôt¶
Certains paramètres du dépôt peuvent être édités, utile principalement pour personnaliser l’apparence du dépôt sur https://git.immae.eu dans le cas où il est public :
Définir la section où afficher le dépôt:
ssh gitolite@git.immae.eu config path/to/repository --add gitweb.category SomeCategory
Définir le nom du dépôt:
ssh gitolite@git.immae.eu config path/to/repository --add cgit.name UnNom
Définir la description du dépôt:
ssh gitolite@git.immae.eu desc path/to/repository "Nouvelle description"
Définir le readme du dépôt:
cat nouveau_readme.html | ssh gitolite@git.immae.eu readme path/to/repository set
Il doit contenir du html qui sera « contenu » dans un <div>
Configuration d’événements¶
Il est possible de configurer les paramètres d’événements en mettant les
informations dans un fichier .immae_config.yaml
Les informations de la branche principale (HEAD
, souvent master
)
seront utilisées pour configurer les actions lors des événements.
Chaque hook doit être activé par moi-même pour être utilisable. Sinon le fichier sera ignoré:
hooks:
xmpp:
# XMPP handles to push information to
dest:
- user1@example.com
- user2@example.com
buildbot:
# Url to push the information to
url: https://git.immae.eu/buildbot/test/change_hook/base
# branches for which to push the change to buildbot
# Default: every reference
refs:
- refs/heads/master
- refs/heads/dev
# Project name in buildbot configuration
projectname: TestProject
apprise:
# Apprise URL to push events to
# Can be replaced with a keyword to transmit to me for
# confidentiality
# See https://github.com/caronc/apprise/ for supported methods
urls:
- someKeyWord
- matrixs://some.url/
refs:
# branches for which to push the change via Apprise
# Default: every reference
- refs/heads/master
- refs/heads/dev
mantisbt:
# Project Source ID to push to on mantisbt (!= project id)
projectSourceId: 11
meta:
# Additional information used by hooks
issueurl: "https://git.immae.eu/mantisbt/view_all_bug_page.php?project_id=7"
repourl: "https://git.immae.eu/cgit/perso/Immae/TestProject.git/"
commiturl: "https://git.immae.eu/cgit/perso/Immae/TestProject.git/commit/?id=%s"
compareurl: "https://git.immae.eu/cgit/perso/Immae/TestProject.git/diff/?id2=%s&id=%s"
branchurl: "https://git.immae.eu/cgit/perso/Immae/TestProject.git/log/?h=%s"
Automatisation¶
Il est possible d’effectuer des tâches automatiquement lors d’un push. Parmi les actions déjà implémentées, il y a:
Lancer un job de build ou déploiement (cf Intégration continue avec Buildbot)
Mettre à jour les tickets dans Mantisbt (cf Gestion des tickets avec Mantisbt)
Notifier par slack ou xmpp.
La configuration de ces paramètres passe pour le moment par moi.
Gestion de clés ssh¶
Il est possible d’ajouter des clés ssh par deux moyens :
En me communiquant une nouvelle clé
De façon autonome en utilisant la commande gitolite associée:
ssh gitolite@git.immae.eu sskm help
La suite de ce paragraphe détaille cette seconde méthode (dont la documentation en anglais est disponible aussi sur https://gitolite.com/gitolite/contrib/sskm.html ).
L’ajout d’une clé se fait en deux étapes :
D’abord ajouter la clé:
cat .ssh/id_rsa.pub | ssh gitolite@git.immae.eu sskm add @identifiant
où @identifiant
peut être remplacé par un nom au choix.
(la commande prend du temps, il faut être patient)
Puis la confirmer en se connectant avec cette nouvelle clé:
ssh -i .ssh/id_rsa gitolite@git.immae.eu sskm confirm-add @identifiant
La suppression fonctionne de façon similaire avec del
au lieu de
add
. À noter qu’il faut utiliser une autre clé que celle supprimée
pour confirmer.