Установите модуль 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
Ответы
Ответ 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
. Таким образом, токен скомпрометирован, злоумышленник просто может прочитать этот репозиторий и не может вносить изменения.
Создание маркера развертывания
- Войдите в свою
GitLab
запись GitLab
. - Перейдите к проекту, для которого вы хотите создать токены развертывания.
- Перейдите в Настройки> Репозиторий.
- Нажмите
Expand
в разделе Развертывание токенов. - Выберите имя и, возможно, дату истечения срока действия токена.
- Выберите нужные области. <= выберите
read_repository
- Нажмите на Создать токен развертывания.
- Сохраните токен развертывания в безопасном месте. После того как вы покинете или обновите страницу, вы не сможете получить к ней доступ снова.
Старый ответ
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, но я не вижу способа отладить это.