использование токена gitlab для клонирования без аутентификации

140

Я хочу клонировать репозиторий gitlab без запроса моего сценария автоматизации, используя свой личный токен из моей учетной записи gitlab.

Может ли кто-нибудь предоставить мне образец?

Я знаю, что могу сделать это с помощью пользователя и пароля:

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

и я знаю, что это возможно с помощью ключа ssh

но обоих вариантов недостаточно

Muky
источник
21
git clone https://<token-name>:<token>@gitlaburl
Kinght 金
1
@Kinght 金 Работала только твоя команда !!. Большое спасибо :-)
Hussain K

Ответы:

195

Я знаю, что это старый, но вот как вы это делаете:

git clone https://oauth2:ACCESS_TOKEN@somegitlab.com/vendor/package.git

Рошан Гаутам
источник
3
У меня это сработало на GitLab 8.5.7 Enterprise Edition.
Бен Паттерсон
1
Работает здесь (GitLab Community Edition 8.16.5 064dab1)
Мартин М.
5
Оно работает! Интересно, почему на gitlab.com в деталях проекта не приводится полный синтаксис команды: - ((
FRa
Работает для Gitlab 10.4.4, но вам нужно создать apiтокен. A read_userможет читать только репо под/users
Курт
2
Как это использовать ssh?
hemu
41

Сделать это можно так:

git clone https://gitlab-ci-token:<private token>@git.example.com/myuser/myrepo.git
Тим Хьюз
источник
2
это кажется правильным, но мне всегда не удается
пройти
то же самое для меня: fatal: Аутентификация не удалась
vogash 03
4
<частный токен> необходимо заменить токеном исполнителя CI, а не личным токеном учетной записи.
Кип
2
Я думаю, вы также должны иметь возможность использовать свой личный токен правильно @tim
Гоби Дасу
Вы можете использовать токен ci для конкретного проекта (включите сборки, затем перейдите в конфигурацию проекта / бегунов).
BM5k
41

В gitlab много токенов:

  • Частный токен
  • Токен личного доступа
  • CI / CD рабочий токен

Я тестировал только токен персонального доступа с помощью GitLab Community Edition 10.1.2 , пример:

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

или используя имя пользователя и пароль:

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

или введя свой пароль:

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

Но частный токен, похоже, не может работать.

xuanyuanaosheng
источник
5
Обратите внимание, что частные токены были удалены в пользу токенов личного доступа в GitLab 10.2: about.gitlab.com/2017/09/22/gitlab-10-0-released/…
Дэвид Планелла
26

Используйте токен вместо пароля (токен должен иметь область api для разрешения клонирования):

git clone https://username:token@gitlab.com/user/repo.git

Протестировано против 11.0.0-ee.

Збынек Винклер
источник
Да, у меня работает. Токен можно использовать как пароль.
cwtuan
1
Для людей, которые ищут это в Google: это то, что вам нужно, если вы используете токены личного доступа через HTTPS на gitlab.com.
Адам Бакстер
14

Вы можете использовать токен runners для конвейеров CI / CD вашего репозитория GitLab.

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

Где <runners token>можно получить:

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

или нажав на Settings icon -> CI/CD Pipeline и найдите на странице жетон бегунов.

Скриншот расположения токена бегунов: Скриншот расположения токена бегунов

Энлай Чу
источник
5
Примечание. Токен бегунов устарел.
Арихант Годха
@ArihantGodha источник?
miq
2
@miq см. здесь (по состоянию на> = 8.12)
Ян Фото
1
Этот формат устарел, см. Stackoverflow.com/questions/25409700/…
Мухан Алим
Не работает изнутри конвейера GitLab CI. Но эта линия работает:git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/...
Slawa
12

Если у вас уже есть репозиторий и вы только что изменили способ аутентификации на MFA, вы можете изменить свой remote originHTTP URI для использования нового токена api следующим образом:

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

И вам вообще не нужно повторно клонировать репозиторий.

Роджер Баррето
источник
3
git clone https://oauth2:TOKEN@ANY_GIT_PROVIDER_DOMAIN/YOUR_PROJECT/YOUR_REPO.gitу меня тоже работал, спасибо !! Я отвечу на эту тему своим правильным решением.
Rutrus
10

Один из возможных способов - использовать токен развертывания ( https://docs.gitlab.com/ee/user/project/deploy_tokens ). После создания токена используйте:

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

как указано в ссылке выше.

Шахар Таите
источник
Это также не похоже на работу с npm install в новом контейнере докеров, по умолчанию ssh.
Vix
На самом деле не работает.
rios0rios0
10

На данный момент 8.12клонирование с использованием HTTPSтокена + runner больше не поддерживается, как упоминалось здесь :

В 8.12 мы улучшили разрешения на сборку. Возможность клонировать проект с использованием токена бегунов теперь не поддерживается (на самом деле он работал случайно и никогда не был полноценной функцией, поэтому мы изменили это в 8.12). Вместо этого вы должны использовать токен сборки.

Это широко описано здесь - https://docs.gitlab.com/ce/user/project/new_ci_build_permissions_model.html .

Ян Фото
источник
1
Невозможно использовать токены бегунов, но используются токены личного доступа. Пожалуйста, посмотрите мой ответ: stackoverflow.com/questions/25409700/…
Мухан Алим
@MuhanAlim Я бы не рекомендовал никому раскрывать всю свою учетную запись с помощью токенов доступа. Вот почему они называются токенами частного доступа !
Yan Foto
В вопросе ничего не говорится о том, чтобы сделать ключ общедоступным, а только о том, как использовать ключ вместо имени пользователя и пароля для клонирования. Но это хороший аргумент, я бы не рекомендовал никому использовать ключи в общедоступных местах.
Мухан Алим
1
сценарий автоматизации подразумевает, что вся процедура не выполняется локально. Наверное, где-нибудь, где и у других есть доступ.
Yan Foto
8

Внутри конвейера GitLab CI CI_JOB_TOKENу меня работает переменная среды:

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

Источник: Gitlab Docs

Кстати, установка этой переменной .gitlab-ci.ymlпомогает отлаживать ошибки.

variables:
    CI_DEBUG_TRACE: "true"
Slawa
источник
2

Я пошел по SSH, используя настройку ключей развертывания для каждого проекта (только чтение)

Laurent
источник
Я тоже, потому что использую GIT_STRATEGY: none.
Aalex Gabi,
1

Чтобы мое будущее было счастливым: RTFM - вообще не используйте gitlab-ci-token, а только .netrcфайл.

Есть пара важных моментов:

  1. echo -e "machine gitlab.com\nlogin gitlab-ci-token\npassword ${CI_JOB_TOKEN}" > ~/.netrc
  2. Не забудьте заменить "gitlab.com" своим URL!
  3. Не пытайтесь быть умным и создавать файл .netrc напрямую - gitlab не заменит $CI_JOB_TOKEN внутри файла!
  4. Используйте https://gitlab.com/whatever/foobar.com- не ssh://git@foobar, не git+ssh://, неgit+https:// . Вам также не нужны никакие CI-TOKEN в URL.
  5. Убедитесь, что вы можете git clone [url from step 4]

Предыстория: у меня есть

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

когда я пытался заставить Ansible + Gitlab + Docker работать так, как я это себе представляю. Теперь это работает.

Мартин Тома
источник
1

многие ответы выше близки, но они получают неверный usernameсинтаксис для deployтокенов. Существуют и другие типы токенов, но deploy tokenэто то, что предлагает gitlab (по крайней мере, около 2020+) для каждого репо. чтобы разрешить индивидуальный доступ, включая доступ только для чтения.

из a repository(или group) найдите settings-> repository-> deploy tokens. Создайте новый. A usernameи tokenполе созданы. По usernameумолчанию НЕ является фиксированным значением; это уникально для этого токена.

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

протестировано на общедоступной бесплатной учетной записи gitlab.com.

Майк
источник