Accéder à un dépôt GitLab en https avec un token de déploiement

La plupart du temps, on accède aux dépôts GitLab via le protocole SSH plutôt qu’en https.

On va voir aujourd’hui comment cloner un dépôt GitLab en https avec un token de déploiement.

1. Créer un token de déploiement

Un token de déploiement est un token spécifique à un dépôt.

Lors de sa création, on lui donne un certain nombre de droits sur le dépôt.

Enfin, il est destiné à être utilisé dans une CI.

Pour créer un token de déploiement on va aller dans la section: Settings > Repository > Deploy tokens du dépôt GitLab:

On va créer un token de déploiement nommé « my_deploy_token » avec uniquement les droits « read_repository »:

A ce stade, il faut bien noter le mot de passe du token, car celui-ci ne sera affiché qu’immédiatement après la création du token !

En effet seuls le nom du token « my_deploy_token » et son nom d’utilisateur « gitlab+deploy-token-222 » seront accessibles dans Settings > Repository > Deploy tokens par la suite.

2. Cloner le dépôt GitLab

Avec ce token disposant des droits « read_repository », on va pouvoir cloner ce dépôt pour lequel on a créé le token de déploiement:

$ git clone https://gitlab+deploy-token-222:pEbJPgxWbonMKnhkAqf7@framagit.org/grumpyf0x48/private-jbang-catalog.git
Clonage dans 'private-jbang-catalog'...
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 7 (delta 1), reused 0 (delta 0), pack-reused 0
Dépaquetage des objets: 100% (7/7), 735 octets | 183.00 Kio/s, fait.

On voit que le nom « my_deploy_token » n’est pas utilisé, on l’utilisera donc pour décrire à quoi servira ce token afin de se souvenir pourquoi on l’a créé.

3. Caractéristiques du dépôt Git

Si on regarde la configuration du dépôt Git que l’on vient de cloner:

$ more .git/config 
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[remote "origin"]
	url = https://gitlab+deploy-token-222:pEbJPgxWbonMKnhkAqf7@framagit.org/grumpyf0x48/private-jbang-catalog.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
	remote = origin
	merge = refs/heads/master

On voit que l’URL spécifiée est bien l’URL https utilisée précédemment.

Maintenant, que se passe t-il si je cherche à modifier le dépôt:

$ touch newfile
$ git add newfile
$ git commit -m"Add newfile"
[master 92f6974] Add newfile
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 newfile
$ git push
remote: You are not allowed to upload code.
fatal: impossible d'accéder à 'https://framagit.org/grumpyf0x48/private-jbang-catalog.git/' : The requested URL returned error: 403

Je reçois bien une erreur 403 (Forbiden) puisque le token utilisé n’a pas les droits de modifier le dépôt.

Il n’y a d’ailleurs pas la possibilité de créer un token de déploiement avec les droits « write_repository ».

4. Conclusion

On a vu aujourd’hui comment créer un token de déploiement pour un dépôt GitLab et l’utiliser pour cloner ce dépôt.

Finalement, un token de déploiement GitLab s’apparente à un couple username / password qui n’est utilisable que pour un dépôt donné.

On peut également définir une durée de validité sur le token ou le révoquer.

Les tokens de déploiement GitLab étant principalement utilisés au sein d’une CI, on verra dans un prochain billet comment cela fonctionne.