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


97

私たちはプライベートプロジェクトにGitLabを使用しています。npmモジュールとしてインストールしたい、githubからのフォークされたライブラリーがいくつかあります。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を取得しました git@git.domain.com:library/grunt-stylus-sprite.git。これに対してnpm installこれを実行gitすると、npmレジストリからモジュールをインストールしようとします。

ただし、URLを使用するgit+ssh@git.domain.com:library/grunt-stylus-sprite.gitと、突然パスワードを要求されます。SSHキーにパスフレーズが含まれていないため、そのキーをロードできなかったと思います。たぶん、私が見逃したいくつかの構成がありますか?キーは、私の名前が付いたホームディレクトリの標準の場所にあり"id_rsa"ます。

私はWindows 7 x64を使用しています。

更新

NPM v3以降、GitLabおよびその他のソース(BitBucket、Gist)の組み込みサポートがあり、そこからパッケージをインストールできます。残念ながらそれは公的なものでのみ機能するので、これと正確に関連しているわけではありませんが、いくつかはそれが役に立つと思うかもしれません。

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

ドキュメントを確認してください:https : //docs.npmjs.com/cli/install


1
それで、私が使用する実際のgitlab urlは何ですか?私はちょうど見<placeholders>、私はいくつかのバリエーションを試してみましたが、それはまだプロジェクトが見つからないと言います。
不安定な

1
$ npm i -S git+ssh://git@gitlab.com/org/repo.git動作しません
チョビー

回答:


157

プライベートgitlabリポジトリに接続するには、次の方法があります

SSHを使用

git+ssh://git@git.mydomain.com:Username/Repository#{branch|tag}
git+ssh://git@git.mydomain.com/Username/Repository#{branch|tag}

HTTPSを使用

git+https://git@git.mydomain.com/Username/Repository#{branch|tag}

HTTPSとデプロイトークン

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

ええ、それは私が理解したことのほとんどです。のようにブランチやタグを指定することもできますRepository#1.2.3。これはより正確なので、答えの目盛りを変更します。
FredyC 2014年

1
@jamessidhuわかりませんが、SSHでもパスワードを要求されます。パスワードを入力すると、エラーが発生します。それを解決する方法はありますか?
コードスヌーカー

@codesnooker GitlabでSSHキーを設定しましたか?マシンとリモートの間でキーが認証されていない場合、サーバーへのアクセスと同様に、パスワードがデフォルトになります。
sidhuko

5
これが実際に機能するのは、実際のURL構文を使用した場合のみですgit+ssh://git@git.mydomain.com/Username/Repository(たとえば、/でホストとユーザー名が分離されていることに注意してください)。これは糸固有のものである可能性があります。おそらく、推奨される例はnpmで機能します
Ivo van der Wijk

1
展開トークンはうまく機能します。<token-name>例ではのようgitlab+deploy-token-17034に見えますが、トークンに割り当てる任意の名前ではありません。
Mr5o1 2018


22

更新

コメントで@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

ここに画像の説明を入力してください

生成されたコピー。ファイルにtoken必要package.jsonです。

ここに画像の説明を入力してください

次のようにpackage.json追加dependencyします:

"my-module": "git+https://Xaqron:token@gitlab.com/Xaqron/my-module"

Xaqronユーザー名とtoken生成されたトークンに置き換えます。branchtagでURLの最後にを指定できます#{branch|tag}

注:アクセストークンはpackage.json、このプロジェクトへのアクセス権を持つすべてのユーザーがリポジトリを読み取ることができる場所にあるため、プロジェクト自体は非公開であると思います。


5
もう1つの方法は、その特定のリポジトリーのデプロイトークンを作成することです。次に、すべてのリポジトリに読み取りアクセス権を付与しません。 "private-module": "git+https://gitlab+deploy-token-username:deploy-token@gitlab.com/you/project",
Chris Sattinger

npm ERR! enoent undefined ls-remote -h -t https://puump:pass@gitlab.com/puump/puump-content.git
chovy

2
@chovy:インストールgit 参照
Xaqron

1
また、プロジェクトがグループ内にある場合"private-module": "git+https://gitlab+deploy-token-username:deploy-token@gitlab.com/group_name/project"your username、次のように定義する必要があることも指摘しておきます。の代わり group_nameに、プロジェクト名の前に定義する必要があります
sfarzoso

8

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

私にとっては、URLを変更しただけでは機能しませんでした。これを修正するために必要な手順は次のとおりです。

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

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


それはタイプミスでなければなりません。:owner
chovy

1
私は何をし~/.ssh/configますか?私はまだでて届かないNPM / gitlab
chovy

6

ただ、この全体つまずく誰のために、私はそれがすべてで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

他の回答はいずれも、gitlab.comのプライベートリポジトリではうまくいきませんでした...

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

npm i -S git+ssh://git@gitlab.com:<org>/<project>.git

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


1
ssh公開鍵がgitlabアカウントですでに設定されている場合、これは機能します。
lasec0203 2017年

3

あなたが間違っているところを私が知ることができる限り、git://プロトコルです。GitLabはクローンのHTTP(s)とSSHのみをサポートします。したがって、gitプロトコルではなく、これらのメソッドのいずれかを使用する必要があります。


3

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

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

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


これも私にとってはうまくいきました。自己署名証明書を使用してプロキシの背後で作業しています。
Stefano Mozart

これは実際に私のために働きましたが、他の人がそれを書くのに使用するかもしれないので、package.jsonにトークンを残しておくのは良い考えですか?gitlab(少なくとも私の場合)では、読み取り専用アクセストークンを作成することはできませんが、フルアクセストークンのみを作成できます。どう思いますか?
Cancerbero

注:GitLab 10.7(2018年4月リリース)では、プロジェクトレベルの「デプロイトークン」が追加されました。これらは、ユーザーレベルの「アクセストークン」の代わりに使用する必要があります。docs link

0

URLでハードコードされたトークンの代わりにトークンを保持する環境変数を使用したい場合は、非常に複雑でも解決策を考え出しました。GIT_ASKPASS環境変数を使用してbashスクリプトからパスワードを取得します。このスクリプトは環境変数をエコーし​​ます。特定のGIT環境変数のみを渡すnpmを克服するために、仲介者GIT_SSHとして使用します。

したがって、git_pass_env.shcontaining echo $GIT_SSHを指定すると、次のように呼び出すことができます。

GIT_SSH=<TOKEN> GIT_ASKPASS="$(pwd)/git_pass_env.sh" npm install

dockerおよびdocker-composeを使用したサンプルプロジェクトについては、 、こちらの私のリポジトリてください

環境変数のフロー図:

フロー図


0

Gitlabには、npmパッケージのビルド、デプロイ、ホストが可能なパッケージレジストリがあります。プライベートリポジトリを使用すると、リポジトリのコンテンツとパッケージに対するきめ細かなアクセス制御を提供できます。

NPMパッケージは、.npmrcファイルを一緒に追加することにより、プライベートGitlabリポジトリからインストールできますpackage.json。詳細はこちら。同じコードベースの異なるリポジトリに複数のデプロイトークンを使用すると、複雑になります。

Gitlabを使用すると、パッケージ.tgzファイルにHTTPSで直接アクセスしてトークンをデプロイすることができます。次のようにプロジェクトの依存関係を追加するだけです。

"@foo/bar": "https://<username>:<token>@gitlab.com/api/v4/projects/<project-id>/packages/npm/@foo/bar/-/@foo/bar-1.0.0.tgz"

@ foo / barがURLに2回存在します。@fooはプロジェクトスコープ、barはモジュール名、1.0.0はモジュール名です。プロジェクトID(8桁の数値)はGitlabプロジェクトIDで、プロジェクトページの名前の下に表示されます。モジュール名から@fooを省略することも可能です(リンクは不可)。

同じスコープと異なるデプロイトークンで複数のモジュールを使用すると、プライベートリポジトリの管理が安全になります。また、デプロイトークンはアクセス権しか持っていない可能性がありますpackage registry。つまり、エンドユーザーはリポジトリから完全なソースコードにアクセスできません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.