utilisation du jeton gitlab pour cloner sans authentification

139

Je souhaite cloner le référentiel gitlab sans demander mon script d'automatisation, en utilisant mon jeton privé de mon compte gitlab.

Quelqu'un peut-il me fournir un échantillon?

Je sais que je peux le faire avec un utilisateur et un mot de passe:

git clone https://" + user + ":" + password + "@" + gitlaburl;

et je sais que c'est possible avec la clé ssh

mais, les deux options ne sont pas suffisantes

Muky
la source
21
git clone https://<token-name>:<token>@gitlaburl
Kinght 金
1
@Kinght 金 Seule votre commande a fonctionné !!. Merci beaucoup :-)
Hussain K

Réponses:

195

Je sais que c'est vieux mais voici comment vous le faites:

git clone https://oauth2:[email protected]/vendor/package.git

Roshan Gautam
la source
3
Cela a fonctionné pour moi sur GitLab 8.5.7 Enterprise Edition.
Ben Patterson
1
Fonctionne ici (GitLab Community Edition 8.16.5 064dab1)
Martin M.
5
Ça marche! Je me demande pourquoi sur gitlab.com sur les détails du projet, ils ne donnent pas la syntaxe de commande complète: - ((
FR le
Fonctionne pour Gitlab 10.4.4 mais vous devez créer un apijeton. A read_userne peut lire que les dépôts sous/users
Kurt
2
Comment utiliser ça ssh?
Hemu
41

Vous pouvez le faire comme ceci:

git clone https://gitlab-ci-token:<private token>@git.example.com/myuser/myrepo.git
Tim Hughes
la source
2
cela semble correct mais cela échoue toujours à l'authentification pour moi :(
Randyaa
idem pour moi: fatal: l'authentification a échoué pour
vogash
4
<jeton privé> doit être remplacé par le jeton du coureur CI, et non par le jeton privé du compte.
Kip le
2
Je pense que vous devriez également pouvoir utiliser votre jeton personnel @tim
Gobi Dasu
Vous pouvez utiliser le jeton ci spécifique au projet (activer les builds, puis accéder à la configuration du projet / des coureurs).
BM5k du
41

Le gitlab a beaucoup de jetons:

  • Jeton privé
  • Jeton d'accès personnel
  • Jeton d'exécution CI / CD

J'ai testé uniquement le jeton d'accès personnel à l'aide de GitLab Community Edition 10.1.2 , l'exemple:

git clone https://gitlab-ci-token:${Personal Access Tokens}@gitlab.com/username/myrepo.git


git clone https://oauth2:${Personal Access Tokens}@gitlab.com/username/myrepo.git

ou en utilisant un nom d'utilisateur et un mot de passe:

git clone https://${username}:${password}@gitlab.com/username/myrepo.git

ou en saisissant votre mot de passe:

git clone https://${username}@gitlab.com/username/myrepo.git

Mais le jeton privé semble ne pas fonctionner.

xuanyuanaosheng
la source
5
Notez que les jetons privés ont été supprimés au profit des jetons d'accès personnels dans GitLab 10.2: about.gitlab.com/2017/09/22/gitlab-10-0-released/…
David Planella
26

Utilisez le jeton au lieu du mot de passe (le jeton doit avoir une portée "api" pour que le clonage soit autorisé):

git clone https://username:[email protected]/user/repo.git

Testé avec 11.0.0-ee.

Zbyněk Winkler
la source
Oui, ça marche pour moi. Le jeton peut être utilisé comme mot de passe.
cwtuan
1
Pour les personnes qui recherchent ceci sur Google: c'est ce que vous voulez si vous utilisez des jetons d'accès personnels via HTTPS sur gitlab.com.
Adam Baxter
14

Vous pouvez utiliser le jeton runners pour les pipelines CI / CD de votre dépôt GitLab.

git clone https://gitlab-ci-token:<runners token>@git.example.com/myuser/myrepo.git

<runners token>peut être obtenu de:

git.example.com/myuser/myrepo/pipelines/settings

ou en cliquant sur Settings icon -> CI/CD Pipelineet recherchez le jeton de coureurs sur la page

Capture d'écran de l'emplacement du jeton des coureurs: Capture d'écran de l'emplacement du jeton des coureurs

Enlai Chu
la source
5
Remarque: le jeton des coureurs est désormais obsolète.
Arihant Godha
Source @ArihantGodha?
miq
2
@miq voir ici (à partir de> = 8.12)
Yan Foto
1
Ce format est désormais obsolète, veuillez consulter stackoverflow.com/questions/25409700/…
Muhan Alim
Ne fonctionne pas à l'intérieur du pipeline GitLab CI. Mais cette ligne fonctionne:git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/...
Slawa
12

Si vous avez déjà un référentiel et que vous venez de changer la façon dont vous effectuez l'authentification à MFA, vous pouvez modifier votre remote originURI HTTP pour utiliser votre nouveau jeton API comme suit:

git remote set-url origin https://oauth2:TOKEN@ANY_GIT_PROVIDER_DOMAIN/YOUR_PROJECT/YOUR_REPO.git

Et vous n'aurez pas du tout besoin de recloner le référentiel.

Roger Barreto
la source
3
git clone https://oauth2:TOKEN@ANY_GIT_PROVIDER_DOMAIN/YOUR_PROJECT/YOUR_REPO.gita également travaillé pour moi, merci !! Je répondrai à ce fil avec ma solution correcte.
Rutrus
10

Une manière possible consiste à utiliser un jeton de déploiement ( https://docs.gitlab.com/ee/user/project/deploy_tokens ). Après avoir créé le jeton, utilisez:

git clone https://<username>:<deploy_token>@gitlab.example.com/tanuki/awesome_project.git 

comme mentionné dans le lien ci-dessus.

shahar taite
la source
Cela ne semble pas non plus fonctionner avec npm install sur un nouveau conteneur docker, par défaut ssh.
Vix
Ça ne marche vraiment pas.
rios0rios0
10

Depuis 8.12, le clonage à l'aide du HTTPSjeton + runner n'est plus pris en charge, comme mentionné ici :

Dans la version 8.12, nous avons amélioré les autorisations de construction. Être capable de cloner un projet en utilisant un jeton Runners n'est plus pris en charge à partir de maintenant (cela fonctionnait en fait par hasard et n'a jamais été une fonctionnalité à part entière, nous avons donc changé cela dans 8.12). Vous devez utiliser un jeton de construction à la place.

Ceci est largement documenté ici - https://docs.gitlab.com/ce/user/project/new_ci_build_permissions_model.html .

Yan Foto
la source
1
Il n'est pas possible d'utiliser des jetons de coureurs, mais utilise des jetons d'accès personnels. S'il vous plaît voir ma réponse: stackoverflow.com/questions/25409700/…
Muhan Alim
@MuhanAlim Je ne recommanderais à personne d'exposer l'intégralité de son compte en utilisant des jetons d'accès. C'est pourquoi ils sont appelés jetons d'accès privé !
Yan Foto
La question ne mentionne rien sur le fait de rendre la clé publique, seulement comment utiliser la clé à la place d'un nom d'utilisateur et d'un mot de passe pour le clonage. Mais que c'est un bon point, je ne recommanderais à personne d'utiliser les clés partout où il est public.
Muhan Alim
1
Le script d'automatisation implique que l'ensemble de la procédure ne s'exécute pas localement. Probablement quelque part où d'autres ont également accès.
Yan Foto
8

Dans un pipeline GitLab CI, la CI_JOB_TOKENvariable d'environnement fonctionne pour moi:

git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/...

Source: Docs Gitlab

BTW, définir cette variable dans .gitlab-ci.ymlaide à déboguer les erreurs.

variables:
    CI_DEBUG_TRACE: "true"
Slawa
la source
2

Je suis allé SSH en utilisant le paramètre de clé de déploiement par projet (lecture seule)

Laurent
la source
Moi aussi parce que j'utilise GIT_STRATEGY: aucun.
Aalex Gabi
1

Pour rendre mon avenir heureux: RTFM - n'utilisez pas du tout le gitlab-ci-token, mais le .netrcfichier.

Il y a quelques points importants:

  1. echo -e "machine gitlab.com\nlogin gitlab-ci-token\npassword ${CI_JOB_TOKEN}" > ~/.netrc
  2. N'oubliez pas de remplacer "gitlab.com" par votre URL!
  3. N'essayez pas d'être intelligent et créez le fichier .netrc directement - gitlab ne remplacera pas le $CI_JOB_TOKENdans le fichier!
  4. Utilisez https://gitlab.com/whatever/foobar.com- pas ssh://git@foobar, pasgit+ssh:// , non git+https://. Vous n'avez pas non plus besoin d'éléments CI-TOKEN dans l'URL.
  5. Assurez-vous que vous pouvez git clone [url from step 4]

Contexte: j'ai

fatal: could not read Username for 'https://gitlab.mycompany.com': No such device or address

quand j'ai essayé de faire fonctionner Ansible + Gitlab + Docker comme je l'imagine. Maintenant ça marche.

Martin Thoma
la source
1

La personnalisation de l'URL n'est pas nécessaire. Utilisez simplement une configuration git pour les jetons gitlab tels que

git config --global gitlab.accesstoken {TOKEN_VALUE}

description détaillée ici

Bizmate
la source
1

beaucoup de réponses ci-dessus sont proches, mais elles obtiennent une usernamesyntaxe ~ pour les deployjetons incorrecte. Il existe d'autres types de jetons, mais deploy tokenc'est ce que propose gitlab (au moins vers 2020+) par dépôt pour permettre un accès personnalisé, y compris en lecture seule.

à partir de a repository(ou group), recherchez le settings-> repository-> deploy tokens. Créez-en un nouveau. Un champ usernameet tokensont créés. Le usernamen'est PAS une valeur fixe par défaut; c'est unique à ce jeton.

git clone https://<your_deploy_token_username>:<the_token>@gitlab.com/your/repo/path.git

testé sur gitlab.com compte public et gratuit.

Mike
la source