Подтвердить что ты не робот

Установите модуль npm из частного хранилища gitlab

Мы используем GitLab для нашего частного проекта. Есть некоторые разветвленные библиотеки из github, которые мы хотим установить в качестве модуля npm. Установка этого модуля непосредственно из npm в порядке и, например, это:

npm install git://github.com/FredyC/grunt-stylus-sprite.git

... также работает правильно, но для GitLab это тоже самое, просто меняя домен, я получаю эту ошибку.

npm WARN `git config --get remote.origin.url` returned wrong result (git://git.domain.com/library/grunt-stylus-sprite.git)
npm ERR! git clone git://git.domain.com/library/grunt-stylus-sprite.git Cloning into bare repository 'D:\users\Fredy\AppData\Roaming\npm-cache\_git-remotes\git-git-domain-com-library-grunt-stylus-sprite-git-6f33bc59'...
npm ERR! git clone git://git.domain.com/library/grunt-stylus-sprite.git fatal:unable to connect to git.domain.com:
npm ERR! git clone git://git.domain.com/library/grunt-stylus-sprite.git git.domain.com[0: 77.93.195.214]: errno=No error
npm ERR! Error: Command failed: Cloning into bare repository 'D:\users\Fredy\App
Data\Roaming\npm-cache\_git-remotes\git-git-domain-com-library-grunt-stylus-spr
ite-git-6f33bc59'...
npm ERR! fatal: unable to connect to git.domain.com:
npm ERR! git.domain.com[0: xx.xx.xx.xx]: errno=No error

Из веб-интерфейса GitLab у меня есть этот URL-адрес [email protected]:library/grunt-stylus-sprite.git. Запустив это с помощью npm install, он пытается установить модуль git из реестра npm.

Однако использование URL: [email protected]:library/grunt-stylus-sprite.git внезапно просит меня ввести пароль. В моем ключе SSH не содержится ключевой фразы, поэтому я предполагаю, что он не смог загрузить этот ключ. Может быть, есть какая-то конфигурация, которую я пропустил? Ключ находится в стандартном расположении в моем домашнем каталоге с именем "id_rsa".

Я нахожусь в Windows 7 x64.

UPDATE

Поскольку NPM v3 имеет встроенную поддержку GitLab и других источников (BitBucket, Gist), откуда вы можете устанавливать пакеты. К сожалению, он работает только для публичных, поэтому он не совсем связан с этим, но некоторые из них могут оказаться полезными.

npm install gitlab:<gitlabname>/<gitlabrepo>[#<commit-ish>]

Посмотрите документацию: https://docs.npmjs.com/cli/install

4b9b3361

Ответ 1

У вас есть следующие способы подключения к частному репозиторию gitlab

С SSH

git+ssh://[email protected]:Username/Repository#{branch|tag}
git+ssh://[email protected]/Username/Repository#{branch|tag}

С HTTPS

git+https://[email protected]/Username/Repository#{branch|tag}

С HTTPS и маркером развертывания

git+https://<token-name>:<token>@gitlab.com/Username/Repository#{branch|tag}

Ответ 2

Вместо git:// используйте git+ssh://, а npm следует делать правильно.

Ответ 3

Хотя вопрос о Gitlab, этот вопрос довольно хорошо оценивается в поиске Google, поэтому вот еще несколько сведений о том, как исправить аналогичную проблему, которую я получил с Github.

Для меня только изменение URL-адреса не заставило его работать. Вот шаги, которые я должен был предпринять, чтобы исправить это:

  • git+ssh://[email protected]:owner/repo.git#master
  • Создайте ключ развертывания и добавьте его в репо
  • Изменить git config (~/.ssh/config создать файл, если он не существует), чтобы принудительно использовать DeployKey вместо стандартного ключа ssh

После этого установка npm просто работала. Все остальные варианты и решения привели к обходу npm install

Ответ 4

Просто для всех, кто спотыкается об этом, я не мог заставить его работать над HTTPS вообще - кажется, он не поддерживает прямую ссылку на репо (например, https://git.domain.com/user/somerepo.git) и не поддерживает .tar, .tar.bz или .zip.

Кажется, что он работает только с архивом .tar.gz.

Полный пример (с помеченной версией):

https://git.domain.com/user/somerepo/repository/archive.tar.gz?ref=v1.2.3

Ответ 5

Обновить

Как упомянуто в комментариях @felix (спасибо @felix), использование deploy token гораздо gitlab для чтения частного реестра на gitlab. Таким образом, токен скомпрометирован, злоумышленник просто может прочитать этот репозиторий и не может вносить изменения.

Создание маркера развертывания

  1. Войдите в свою GitLab запись GitLab.
  2. Перейдите к проекту, для которого вы хотите создать токены развертывания.
  3. Перейдите в Настройки> Репозиторий.
  4. Нажмите Expand в разделе Развертывание токенов.
  5. Выберите имя и, возможно, дату истечения срока действия токена.
  6. Выберите нужные области. <= выберите read_repository
  7. Нажмите на Создать токен развертывания.
  8. Сохраните токен развертывания в безопасном месте. После того как вы покинете или обновите страницу, вы не сможете получить к ней доступ снова.

Старый ответ

User Settings > Access Tokens и создайте новый access token с разрешением read_registry.

enter image description here

Скопируйте сгенерированный token, он нам нужен для нашего файла package.json.

enter image description here

Теперь в package.json добавьте dependency как показано ниже:

"my-module": "git+https://Xaqron:[email protected]/Xaqron/my-module"

Замените Xaqron на ваше имя пользователя и token на сгенерированный токен. Вы можете указать branch и tag в конце URL-адреса с помощью #{branch|tag}.

Примечание. Так как токен доступа находится в package.json любой, кто имеет доступ к этому проекту, может прочитать репозиторий, поэтому я предполагаю, что ваш проект является частным.

Ответ 6

Насколько я могу сказать, где вы ошибаетесь, это протокол git://. GitLab поддерживает только HTTP и SSH для клонов. Поэтому вы должны использовать один из этих методов вместо протокола git.

Ответ 7

Ни один из других ответов не работал у меня для частной репликации gitlab.com...

Однако это работает:

npm i -S git+ssh://[email protected]:<org>/<project>.git

Его просто git URL-адрес ssh-клонирования из поля ввода "клонировать" страницы проекта с git+ssh://, добавленным к нему.

Ответ 8

Для меня устанавливается package.json, как показано ниже.

"dependencies": {
    "<module-name>": "git+http://<username>:<token>@url.git",
}

Токен получает от вашего "Настройки профиля - токен доступа".

Ответ 9

Я перепробовал все вышеперечисленные решения, но у меня ничего не работает. Я, кажется, очень близко подошел к решению ключа развертывания, но получил ошибку premature close

Я создал ключ развертывания и в пакете приложения. Json у меня есть

git+https://<token-name>:<token>@gitlab.example.com/group/repo#master

Я подозреваю, что npm, когда я запускаю npm install для приложения, не может прочитать зависимую package.json, но я не вижу способа отладить это.