gitlab 개인 저장소에서 npm 모듈 설치


98

우리는 개인 프로젝트에 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 레지스트리에서 모듈 npm install을 설치하려고합니다 git.

그러나 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>내가 몇 가지 변화를 시도하고 여전히 프로젝트를 찾을 수 없습니다 말했다.
chovy

1
$ npm i -S git+ssh://git@gitlab.com/org/repo.git하지 작업 수행
chovy

답변:


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

@codesnooker Gitlab에서 SSH 키 를 설정 했습니까 ? 컴퓨터와 리모컨간에 키가 인증되지 않으면 서버에 대한 액세스와 같은 암호로 기본 설정됩니다.
sidhuko

5
이것은 실제로 진정한 URL 구문을 사용하는 경우에만 작동합니다 (예 : git+ssh://git@git.mydomain.com/Username/Repository호스트 및 사용자 이름 구분). 이것은 아마도 제안 된 예는 NPM과 함께 작업을 수행, 원사 특정의 일이 될 수 있습니다
이보 반 Wijk 데르

1
배포 토큰은 훌륭하게 작동합니다. <token-name>예제에서처럼 보이는 gitlab+deploy-token-17034것은 토큰에 할당 한 임의의 이름이 아닙니다.
Mr5o1

26

대신 git://use git+ssh://및 npm이 올바른 작업을 수행해야합니다.


5
NPM 작성자 자체 👆에서 대답
디마 Parzhitsky

나는 얻는다undefined ls-remote <url>
23:46에

git + ssh : git@git.mydomain.com/Username/Repositor, 제거 // 나를 위해 작동합니다. Thx
AliasCocoa

23

최신 정보

@felix가 주석에서 언급했듯이 (@felix에게 감사드립니다) .NET deploy token에서 개인 레지스트리를 읽는 데 훨씬 더 관련이 있습니다 gitlab. 이렇게하면 토큰이 손상되고 공격자는 해당 저장소를 읽을 수 있으며 변경할 수 없습니다.

배포 토큰 생성

  1. 귀하의 GitLab계정에 로그인하십시오 .
  2. 배포 토큰을 생성하려는 프로젝트로 이동합니다.
  3. 설정> 리포지토리로 이동합니다.
  4. Expand토큰 배포 섹션을 클릭합니다 .
  5. 토큰의 이름과 선택적으로 만료 날짜를 선택하십시오.
  6. 원하는 범위를 선택하십시오. <= 선택read_repository
  7. 배포 토큰 생성을 클릭합니다.
  8. 배포 토큰을 안전한 곳에 저장하십시오. 페이지를 나가거나 새로 고침하면 다시 액세스 할 수 없습니다.

이전 답변

이동 하여 권한이 User Settings > Access Tokens있는 새 만들기 .access tokenread_registry

여기에 이미지 설명 입력

사본이 생성 token되었습니다 package.json. 파일에 필요 합니다.

여기에 이미지 설명 입력

이제 아래와 같이 package.json추가하십시오 dependency.

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

Xaqron사용자 이름과 token생성 된 토큰으로 바꿉니다 . 으로 URL 끝에 branchtag을 지정할 수 있습니다 #{branch|tag}.

참고 : 액세스 토큰은 package.json이 프로젝트에 대한 액세스 권한이 있는 모든 사용자가 저장소를 읽을 수 있으므로 프로젝트 자체가 비공개라고 가정합니다.


5
다른 방법은 특정 저장소에 대한 배포 토큰을 만드는 것입니다. 그런 다음 모든 저장소에 대한 읽기 액세스 권한을 부여하지 않습니다. "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

2
또한 프로젝트가 그룹 내에있는 경우 다음을 정의해야합니다. "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
  • 배포 키를 만들고 저장소에 추가
  • ~/.ssh/config기본 ssh 키 대신 DeployKey를 사용하도록 git config ( 파일이없는 경우 생성)를 편집 합니다.

그 후 npm 설치가 간단히 작동했습니다. 다른 모든 옵션 및 솔루션은 npm 설치 중단으로 인해 발생했습니다.


오타 여야합니다. :owner?
chovy

1
나는 무엇을 ~/.ssh/config합니까? 나는 아직도 npm / gitlab을 통과하지 못하고있다
chovy

6

그것은 REPO (예에 대한 직접 링크를 지원하지 않는 것 같습니다 - 그냥이를 통해 실수를 한단다 다른 사람을 위해, 나는 그것이 전혀 이상 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 복제 URL git+ssh://이 앞에 추가됩니다.


1
ssh 공개 키가 이미 gitlab 계정에 설정되어 있으면 작동합니다.
lasec0203

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 월 출시)은 프로젝트 수준의 '배포 토큰'을 추가했습니다. 사용자 수준의 "액세스 토큰"대신 사용해야합니다. 문서 링크

0

URL에 하드 코딩 된 토큰 대신 토큰을 보유 하는 환경 변수 를 사용하려면 상당히 복잡한 솔루션을 생각해 냈습니다. GIT_ASKPASS환경 변수를 사용하여 bash 스크립트에서 암호를 가져 오며이 스크립트는 환경 변수를 에코합니다. 특정 GIT 환경 변수 만 전달하는 npm을 극복하기 위해 중개자로 사용할 것 GIT_SSH입니다.

따라서 git_pass_env.sh포함이 주어지면 다음 을 echo $GIT_SSH호출 할 수 있습니다.

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

docker 및 docker-compose가있는 예제 프로젝트는 여기에서 내 repo를 참조 하십시오 .

환경 변수 흐름도 :

흐름도


0

이제 Gitlab에는 npm 패키지를 빌드, 배포 및 호스팅 할 수있는 패키지 레지스트리가 있습니다. 프라이빗 리포지토리를 사용하면 리포지토리 콘텐츠 및 패키지에 대한 세밀한 액세스 제어를 제공 할 수 있습니다.

NPM 패키지는 .NET Framework .npmrc와 함께 파일 을 추가하여 비공개 Gitlab 리포지토리에서 설치할 수 있습니다 package.json. 여기에 더 많은 정보가 있습니다 . 동일한 코드베이스의 다른 리포지토리에 여러 배포 토큰을 사용하면 복잡해집니다.

Gitlab을 사용하면 HTTPS로.tgz 직접 패키지 파일 에 액세스하고 token을 배포 할 수 있습니다. 다음과 같이 프로젝트 종속성을 추가하기 만하면됩니다.

"@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에 두 번 표시됩니다. @foo는 프로젝트 범위이고 bar는 모듈 이름이고 1.0.0은 모듈 이름입니다. project-id (8 자리 숫자)는 Gitlab 프로젝트 ID이며 이름 아래의 프로젝트 페이지에서 볼 수 있습니다. 모듈 이름에서 @foo를 생략 할 수도 있습니다 (링크가 아님).

범위가 같고 배포 토큰이 다른 여러 모듈을 사용하면 비공개 리포지토리를 안전하게 관리 할 수 ​​있습니다. 또한 배포 토큰은 액세스 권한 만 가질 수 있습니다. package registry즉, 최종 사용자는 저장소에서 전체 소스 코드에 액세스 할 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.