web-dev-qa-db-ja.com

gitlabプライベートリポジトリからnpmモジュールをインストールする

プライベートプロジェクトに 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のWebインターフェイスから、このURL [email protected]:library/grunt-stylus-Sprite.gitがあります。 npm installに対してこれを実行すると、npmレジストリからgitモジュールをインストールしようとします。

しかし、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

73
FredyC

プライベート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}
118
sidhuko

git://の代わりにgit+ssh://を使用すると、npmは正しいことを行うはずです。

19
isaacs

更新

@felixがコメント(@felixに感謝)で言及したように、deploy tokenを使用することは、gitlabのプライベートレジストリを読み取るのにより適しています。これにより、トークンが侵害され、攻撃者はそのリポジトリを読み取ることができ、変更を加えることができません。

展開トークンの作成

  1. 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の末尾にbranchtagを指定できます。

注:アクセストークンはpackage.jsonにあるため、このプロジェクトにアクセスできる人は誰でもリポジトリを読み取ることができるため、プロジェクトはプライベートであると想定します。自体。

14
Xaqron

質問はGitlabについてですが、この質問はGoogle検索で非常によくランク付けされているので、Githubで得た同様の問題を修正する方法に関する詳細情報を以下に示します。

私にとっては、URLを変更しただけでは機能しませんでした。これを修正するために私が取らなければならなかったステップはここにあります:

  • git+ssh://[email protected]:owner/repo.git#master
  • デプロイキーを作成し、リポジトリに追加します
  • Git configを編集し(~/.ssh/configファイルが存在しない場合は作成します)、デフォルトのsshキーの代わりにDeployKeyの使用を強制します

その後、npmインストールは単純に機能しました。他のすべてのオプションとソリューションは、npmインストールが壊れた結果です

6
Sephy

これに遭遇した他の人のために、私はそれを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

6
chrisf

どこがおかしいのかがわかる限り、git://プロトコルがあります。 GitLabは、クローンのHTTPとSSHのみをサポートします。したがって、gitプロトコルの代わりにこれらのメソッドのいずれかを使用する必要があります。

3
Sam Gleske

私にとっては、package.jsonを以下のように設定します。

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

トークンは、「プロファイル設定-アクセストークン」から取得されます。

2
shentaoy

私用のgitlab.comリポジトリでは、他の回答はどれも役に立ちませんでした...

ただし、これは機能します。

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

プロジェクトページの「clone」入力フィールドからのgit ssh clone urlと、その前面にgit+ssh://が追加されています。

2
chovy