Używamy GitLab do naszego prywatnego projektu. Istnieje kilka rozwidlonych bibliotek z github, które chcemy zainstalować jako moduł npm. Zainstalowanie tego modułu bezpośrednio z npm jest ok i na przykład to:
npm install git://github.com/FredyC/grunt-stylus-sprite.git
... też działa poprawnie, ale robiąc to samo dla GitLab, po prostu zmiana domeny powoduje ten błąd.
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
Z interfejsu internetowego GitLab mam ten adres URL
[email protected]:library/grunt-stylus-sprite.git
. Uruchomienie tego przeciwko npm install
próbuje zainstalować git
moduł z rejestru npm.
Jednak używając URL: [email protected]:library/grunt-stylus-sprite.git
nagle pyta mnie o hasło. Mój klucz SSH nie zawiera hasła, więc zakładam, że nie był w stanie załadować tego klucza. Może jest jakaś konfiguracja, której przegapiłem? Klucz znajduje się w standardowej lokalizacji w moim katalogu domowym o nazwie "id_rsa"
.
Jestem na Windows 7 x64.
AKTUALIZACJA
Od NPM v3 istnieje wbudowana obsługa GitLab i innych źródeł (BitBucket, Gist), z których można instalować pakiety. Niestety działa tylko w przypadku publicznych, więc nie jest to dokładnie związane, ale niektórzy mogą uznać to za przydatne.
npm install gitlab:<gitlabname>/<gitlabrepo>[#<commit-ish>]
Zapoznaj się z dokumentacją: https://docs.npmjs.com/cli/install
<placeholders>
wypróbowałem kilka odmian i nadal jest napisane, że nie znaleziono projektu.$ npm i -S git+ssh://[email protected]/org/repo.git
nie działaOdpowiedzi:
Masz następujące metody łączenia się z prywatnym repozytorium gitlab
Dzięki SSH
Z HTTPS
Z HTTPS i wdrażaj token
źródło
Repository#1.2.3
. Zmienię zaznaczenie odpowiedzi, ponieważ jest to dokładniejsze.git+ssh://[email protected]/Username/Repository
(Zwróć uwagę na / oddzielający hosta i nazwę użytkownika). Może to być sprawa specyficzna dla włóczki, być może sugerowany przykład działa z npm<token-name>
w przykładzie wygląda na togitlab+deploy-token-17034
, że nie jest to dowolna nazwa, którą przypisujesz do tokena.Zamiast
git://
, użyjgit+ssh://
i npm powinny zrobić właściwą rzecz.źródło
undefined ls-remote <url>
Aktualizacja
Jak @felix wspomniał w komentarzach (dzięki @felix), używanie
deploy token
jest znacznie bardziej odpowiednie do czytania prywatnego rejestrugitlab
. W ten sposób token jest zagrożony, atakujący może po prostu odczytać to repozytorium i nie może wprowadzać zmian.Tworzenie tokenu wdrażania
GitLab
konto.Expand
sekcję Rozmieść tokeny.read_repository
Stara odpowiedź
Idź
User Settings > Access Tokens
i utwórz nowyaccess token
zaread_registry
zgodą.Wygenerowana kopia
token
, potrzebujemy jej do naszegopackage.json
pliku.Teraz
package.json
dodaj,dependency
jak poniżej:Zastąp
Xaqron
swoją nazwą użytkownika itoken
wygenerowanym tokenem. Możesz określić adres URLbranch
itag
na końcu adresu#{branch|tag}
.Uwaga: ponieważ token dostępu znajduje się w
package.json
każdym, kto ma dostęp do tego projektu, może odczytać repozytorium, więc zakładam, że twój projekt jest prywatny.źródło
"private-module": "git+https://gitlab+deploy-token-username:[email protected]/you/project",
npm ERR! enoent undefined ls-remote -h -t https://puump:[email protected]/puump/puump-content.git
git
zobacz"private-module": "git+https://gitlab+deploy-token-username:[email protected]/group_name/project"
więc zamiast tegoyour username
musisz zdefiniowaćgroup_name
przed nazwą projektuChociaż pytanie dotyczy Gitlab, to pytanie jest dość dobrze sklasyfikowane w wyszukiwarce Google, więc tutaj jest więcej informacji o tym, jak rozwiązać podobny problem, który otrzymałem z Github.
Dla mnie tylko zmiana adresu URL nie sprawiła, że to zadziałało. Oto kroki, które musiałem podjąć, aby to naprawić:
git+ssh://[email protected]:owner/repo.git#master
~/.ssh/config
utwórz plik, jeśli nie istnieje), aby wymusić użycie DeployKey zamiast domyślnego klucza sshPo tym instalacja npm po prostu zadziałała. Wszystkie inne opcje i rozwiązania spowodowały zerwanie instalacji npm
źródło
:owner
?~/.ssh/config
? Nadal nie mogęWystarczy dla każdego, kto natyka się na to, nie mogłem dostać pracy nad HTTPS w ogóle - wydaje się nie obsługuje bezpośrednie połączenie z repo (np
https://git.domain.com/user/somerepo.git
), ani nie wspierają.tar
,.tar.bz
lub.zip
wersje archiwalne.Wydaje się, że działa tylko z
.tar.gz
archiwum.Pełny przykład (z oznaczoną wersją):
https://git.domain.com/user/somerepo/repository/archive.tar.gz?ref=v1.2.3
źródło
Żadna z innych odpowiedzi nie działała dla mnie w prywatnym repozytorium gitlab.com ...
Działa to jednak:
npm i -S git+ssh://[email protected]:<org>/<project>.git
Jest to po prostu adres URL klonowania git ssh z pola wejściowego „clone” strony projektu z
git+ssh://
dodaniem na początku.źródło
O ile wiem, dokąd zmierzasz źle, to
git://
protokół. GitLab obsługuje tylko protokoły HTTP i SSH dla klonów. Musisz więc użyć jednej z tych metod zamiast protokołu git.źródło
U mnie ustaw plik package.json jak poniżej działa.
Token można pobrać z „Ustawień profilu - Token dostępu”.
źródło
Jeśli chcesz użyć zmiennej środowiskowej przechowującej token zamiast zakodowanego na stałe tokena w adresie URL, wymyśliłem rozwiązanie, nawet trudne, dość złożone. Użyjemy
GIT_ASKPASS
zmiennej środowiskowej, aby uzyskać hasło ze skryptu bash, ten skrypt będzie odzwierciedlał zmienną środowiskową. Aby przezwyciężyć npm przekazując tylko określone zmienne środowiskowe GIT, użyjemyGIT_SSH
jako pośrednik.Tak więc, podając
git_pass_env.sh
zawartośćecho $GIT_SSH
, możemy po prostu zadzwonić:Przykładowy projekt z dockerem i docker-compose znajduje się tutaj w moim repozytorium .
Schemat przepływu zmiennych środowiskowych:
źródło
Gitlab ma teraz rejestr pakietów, w którym można budować, wdrażać i hostować pakiety npm. W przypadku repozytoriów prywatnych można zapewnić szczegółową kontrolę dostępu do zawartości repozytorium i pakietów.
Pakiety NPM można zainstalować z prywatnych repozytoriów Gitlab, dodając
.npmrc
plik obokpackage.json
. Więcej informacji tutaj . Chociaż staje się to skomplikowane, gdy używa się wielu tokenów wdrażania dla różnych repozytoriów w tej samej bazie kodu.Dzięki Gitlab można uzyskać dostęp do
.tgz
pliku pakietu bezpośrednio przez HTTPS i wdrożyć token . Po prostu dodaj zależność projektu w następujący sposób:@ foo / bar występuje dwukrotnie w adresie URL. @foo to zakres projektu, a pasek to nazwa modułu, a 1.0.0 to nazwa modułu. identyfikator projektu (8-cyfrowy numer) to identyfikator projektu Gitlab, który można zobaczyć na stronie projektu pod nazwą. Możliwe jest nawet pominięcie @foo w nazwie modułu (ale nie w linku).
Korzystanie z wielu modułów z tym samym zakresem i różnymi tokenami wdrażania zapewnia bezpieczeństwo zarządzania prywatnymi repozytoriami. Ponadto tokeny wdrożeniowe mogą mieć tylko dostęp,
package registry
co oznacza, że użytkownik końcowy nie będzie mógł uzyskać dostępu do pełnego kodu źródłowego z repozytoriów.źródło