używanie tokena gitlab do klonowania bez uwierzytelniania

150

Chcę sklonować repozytorium gitlab bez pytania o mój skrypt automatyzacji, używając mojego prywatnego tokena z mojego konta gitlab.

Czy ktoś może dostarczyć mi próbkę?

Wiem, że mogę to zrobić za pomocą użytkownika i hasła:

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

i wiem, że jest to możliwe z kluczem ssh

ale obie opcje nie są wystarczające

Muky
źródło
27
git clone https://<token-name>:<token>@gitlaburl
Kinght 金
1
@Kinght 金 Tylko twoja komenda działała !!. Wielkie dzięki :-)
Hussain K

Odpowiedzi:

211

Wiem, że to jest stare, ale tak to się robi:

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

Roshan Gautam
źródło
3
To zadziałało dla mnie w GitLab 8.5.7 Enterprise Edition.
Ben Patterson,
1
Działa tutaj (GitLab Community Edition 8.16.5 064dab1)
Martin M.
5
To działa! Zastanawiam się, dlaczego na gitlab.com w szczegółach projektu nie podają pełnej składni polecenia: - ((
FRa
Działa dla Gitlab 10.4.4, ale musisz utworzyć apitoken. A read_usermoże czytać tylko repozytoria pod/users
Kurt
2
Jak to wykorzystać ssh?
hemu
44

Gitlab ma wiele tokenów:

  • Prywatny token
  • Osobisty token dostępu
  • Działający token CI / CD

Testowałem tylko Personal Access Token przy użyciu GitLab Community Edition 10.1.2 , przykład:

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

lub używając nazwy użytkownika i hasła:

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

lub wpisując swoje hasło:

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

Ale prywatny token wydaje się nie działać.

xuanyuanaosheng
źródło
5
Zauważ, że prywatne tokeny zostały usunięte na rzecz osobistych tokenów dostępu w GitLab 10.2: about.gitlab.com/2017/09/22/gitlab-10-0-released/ ...
David Planella
41

Możesz to zrobić w ten sposób:

git clone https://gitlab-ci-token:<private token>@git.example.com/myuser/myrepo.git
Tim Hughes
źródło
2
wydaje się to słuszne, ale zawsze mi się nie udaje uwierzytelnienie :(
Randyaa
to samo dla mnie: fatal: uwierzytelnianie nie powiodło się dla
vogash
4
<token prywatny> należy zastąpić tokenem CI runnera, a nie tokenem prywatnym konta.
Kip
2
myślę, że powinieneś również móc użyć swojego osobistego tokena w prawo @tim
Gobi Dasu
Możesz użyć tokena ci specyficznego dla projektu (włącz kompilacje, a następnie przejdź do konfiguracji projektu / runners).
BM5k
27

Użyj tokena zamiast hasła (token musi mieć zakres „api”, aby klon był dozwolony):

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

Testowany pod kątem 11.0.0-ee.

Zbyněk Winkler
źródło
Tak, to działa dla mnie. Token może służyć jako hasło.
cwtuan
1
Dla osób szukających w Google: tego właśnie chcesz, jeśli używasz osobistych tokenów dostępu przez HTTPS na gitlab.com.
Adam Baxter
14

Możesz użyć tokena runners dla potoków CI / CD repozytorium GitLab.

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

Gdzie <runners token>można uzyskać:

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

lub klikając na Settings icon -> CI/CD Pipelinei poszukaj Runners Token na stronie

Zrzut ekranu lokalizacji tokena biegaczy: Zrzut ekranu z lokalizacją tokena biegaczy

Enlai
źródło
5
Uwaga: token biegaczy został wycofany.
Arihant Godha,
@ArihantGodha source?
miq
2
@miq patrz tutaj (od> = 8.12)
Yan Foto
1
Ten format jest teraz przestarzały, zobacz stackoverflow.com/questions/25409700/…
Muhan Alim
Nie działa od wewnątrz potoku GitLab CI. Ale ta linia działa:git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/...
Sława
12

Jeśli masz już repozytorium i właśnie zmieniłeś sposób uwierzytelniania na MFA, możesz zmienić swój remote originidentyfikator URI HTTP, aby używał nowego tokenu API w następujący sposób:

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

W ogóle nie będziesz musiał ponownie klonować repozytorium.

Roger Barreto
źródło
3
git clone https://oauth2:TOKEN@ANY_GIT_PROVIDER_DOMAIN/YOUR_PROJECT/YOUR_REPO.gitteż dla mnie pracował, dziękuję !! Odpowiem na ten wątek moim poprawnym rozwiązaniem.
Rutrus
10

Jednym z możliwych sposobów jest użycie tokena wdrażania ( https://docs.gitlab.com/ee/user/project/deploy_tokens ). Po utworzeniu tokena użyj:

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

jak wspomniano w powyższym linku.

shahar taite
źródło
Nie wydaje się też, aby to działało z instalacją npm na nowym kontenerze docker, domyślnie ssh.
Vix
10

Od dnia 8.12klonowanie za pomocą HTTPStokena + runner nie jest już obsługiwane, jak wspomniano tutaj :

W wersji 8.12 poprawiliśmy uprawnienia do kompilacji. Możliwość klonowania projektu przy użyciu tokena runners nie jest od teraz obsługiwana (faktycznie działała przez przypadek i nigdy nie była pełnoprawną funkcją, więc zmieniliśmy to w 8.12). Zamiast tego powinieneś użyć tokena kompilacji.

Jest to szeroko udokumentowane tutaj - https://docs.gitlab.com/ce/user/project/new_ci_build_permissions_model.html .

Yan Foto
źródło
1
Nie jest możliwe używanie tokenów runners, ale używa się osobistych tokenów dostępu. Zobacz moją odpowiedź: stackoverflow.com/questions/25409700/…
Muhan Alim
@MuhanAlim Nie radziłbym nikomu ujawniać całego swojego konta za pomocą tokenów dostępu. Dlatego nazywa się je tokenami dostępu prywatnego !
Yan Foto
Pytanie nie wspomina nic o upublicznieniu klucza, a jedynie o tym, jak użyć klucza zamiast nazwy użytkownika i hasła do klonowania. Ale że to dobra uwaga, nie polecałbym nikomu używania kluczy w miejscach publicznych.
Muhan Alim
1
skrypt automatyzacji oznacza, że ​​cała procedura nie działa lokalnie. Prawdopodobnie gdzieś, do którego inni też mają dostęp.
Yan Foto
8

Wewnątrz potoku GitLab CI CI_JOB_TOKENdziała dla mnie zmienna środowiskowa:

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

Źródło: Gitlab Docs

Przy okazji, ustawienie tej zmiennej w .gitlab-ci.ymlpomaga debugować błędy.

variables:
    CI_DEBUG_TRACE: "true"
Sława
źródło
2

Poszedłem SSH, używając ustawienia kluczy wdrażania projektu (tylko do odczytu)

Laurent
źródło
Ja też, ponieważ używam GIT_STRATEGY: none.
Aalex Gabi
1

Aby uszczęśliwić moją przyszłość: RTFM - w ogóle nie używaj tokena gitlab-ci-token, ale .netrcplik.

Jest kilka ważnych punktów:

  1. echo -e "machine gitlab.com\nlogin gitlab-ci-token\npassword ${CI_JOB_TOKEN}" > ~/.netrc
  2. Nie zapomnij zastąpić „gitlab.com” swoim adresem URL!
  3. Nie staraj się być sprytny i twórz bezpośrednio plik .netrc - gitlab nie zastąpi $CI_JOB_TOKENpliku wewnątrz pliku!
  4. Użyj https://gitlab.com/whatever/foobar.com- nie ssh://git@foobar, nie git+ssh://, nie git+https://. Nie potrzebujesz też żadnych elementów CI-TOKEN w adresie URL.
  5. Upewnij się, że możesz git clone [url from step 4]

Tło: mam

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

kiedy próbowałem sprawić, by Ansible + Gitlab + Docker działało tak, jak sobie wyobrażam. Teraz działa.

Martin Thoma
źródło
1

wiele odpowiedzi powyżej jest bliskich, ale usernamedla deploytokenów składnia ~ jest nieprawidłowa. Istnieją inne typy tokenów, ale deploy tokento właśnie oferuje gitlab (co najmniej około 2020+) na repozytorium, aby umożliwić dostosowany dostęp, w tym tylko do odczytu.

z repository(lub group), znajdź settings-> repository-> deploy tokens. Utwórz nowy. usernameI tokenpola są tworzone. usernameNie jest wartością stałą domyślnie; jest unikalny dla tego tokena.

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

przetestowano na publicznym, bezpłatnym koncie gitlab.com.

mikrofon
źródło
0

Dostosowywanie adresu URL nie jest potrzebne. Po prostu użyj konfiguracji git dla tokenów gitlab, takich jak

git config --global gitlab.accesstoken {TOKEN_VALUE}

rozszerzony opis tutaj

Bizmate
źródło
To nie zadziałało dla mnie i nie mogłem też nigdzie znaleźć dokumentacji na temat opcji konfiguracji o tej nazwie
mark.monteiro
Czy przeczytałeś artykuł w linku? Ta zmienna jest tym, co gitlab pobierze od twojego klienta git do uwierzytelnienia i potrzebujesz osobistego tokena dostępu.
Bizmate
Przeczytałem powiązany artykuł. gitlab.accesstokennic nie robi i na GitLabie nie ma żadnej dokumentacji odnoszącej się do tego
mark.monteiro
0

W dzisiejszych czasach (październik 2020) możesz używać tylko następujących

git clone $CI_REPOSITORY_URL

Który rozwinie się do czegoś takiego:

git clone https://gitlab-ci-token:[MASKED]@gitlab.com/gitlab-examples/ci-debug-trace.git

Jeśli hasło „tokena” jest tokenem efemerycznym, powinno zostać unieważnione po zakończeniu kompilacji.

Pył wulkaniczny
źródło