Wir verwenden GitLab für unser privates Projekt. Es gibt einige gegabelte Bibliotheken von github, die wir als npm-Modul installieren möchten. Die Installation dieses Moduls direkt von npm ist in Ordnung und zum Beispiel:
npm install git://github.com/FredyC/grunt-stylus-sprite.git
... funktioniert auch richtig, aber wenn ich dasselbe für GitLab mache, bekomme ich nur diesen Fehler, wenn ich die Domain wechsle.
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
Über die Weboberfläche von GitLab habe ich diese URL
[email protected]:library/grunt-stylus-sprite.git
. Wenn Sie dies ausführen npm install
, wird versucht, das git
Modul aus der npm-Registrierung zu installieren .
Die Verwendung von URL: [email protected]:library/grunt-stylus-sprite.git
fragt mich plötzlich nach dem Passwort. Mein SSH-Schlüssel enthält keine Passphrase, daher gehe ich davon aus, dass er diesen Schlüssel nicht laden konnte. Vielleicht gibt es eine Konfiguration, die ich verpasst habe? Der Schlüssel befindet sich an der Standardposition in meinem Home-Verzeichnis mit dem Namen "id_rsa"
.
Ich bin auf Windows 7 x64.
AKTUALISIEREN
Seit NPM v3 gibt es eine integrierte Unterstützung für GitLab und andere Quellen (BitBucket, Gist), von denen aus Sie Pakete installieren können. Leider funktioniert es nur für öffentliche, so dass es nicht genau damit zusammenhängt, aber einige finden es möglicherweise nützlich.
npm install gitlab:<gitlabname>/<gitlabrepo>[#<commit-ish>]
Lesen Sie die Dokumentation: https://docs.npmjs.com/cli/install
<placeholders>
ich verschiedene Variationen ausprobiert habe und es steht immer noch, dass das Projekt nicht gefunden wurde.$ npm i -S git+ssh://[email protected]/org/repo.git
funktioniert nichtAntworten:
Sie haben die folgenden Methoden, um eine Verbindung zu einem privaten Gitlab-Repository herzustellen
Mit SSH
Mit HTTPS
Mit HTTPS und Token bereitstellen
quelle
Repository#1.2.3
. Ich werde das Antwort-Häkchen ändern, da dies genauer ist.git+ssh://[email protected]/Username/Repository
(beachten Sie den / trennenden Host und Benutzernamen). Dies kann eine garnspezifische Sache sein, vielleicht funktioniert das vorgeschlagene Beispiel mit npm<token-name>
Im Beispiel sieht es so ausgitlab+deploy-token-17034
, als wäre es nicht der willkürliche Name, den Sie dem Token zuweisen.Stattdessen
git://
sollten usegit+ssh://
und npm das Richtige tun.quelle
undefined ls-remote <url>
Aktualisieren
Wie @felix in den Kommentaren erwähnt hat (danke @felix),
deploy token
ist die Verwendung für das Lesen einer privaten Registrierung auf viel relevantergitlab
. Auf diese Weise wird das Token kompromittiert. Der Angreifer kann das Repository nur lesen und keine Änderungen vornehmen.Erstellen eines Bereitstellungstokens
GitLab
Konto an.Expand
Abschnitt Token bereitstellen.read_repository
Alte Antwort
Gehe zu
User Settings > Access Tokens
und erstelle ein neuesaccess token
mitread_registry
Erlaubnis.Kopie generiert
token
, wir brauchen es für unserepackage.json
Datei.Fügen
package.json
Sie nundependency
Folgendes hinzu:Ersetzen Sie
Xaqron
durch Ihren Benutzernamen undtoken
durch das generierte Token. Sie können angebenbranch
undtag
am Ende der URL durch#{branch|tag}
.Hinweis: Da sich das Zugriffstoken in
package.json
jedem befindet, der Zugriff auf dieses Projekt hat, kann es das Repository lesen. Ich gehe daher davon aus, dass Ihr Projekt selbst privat ist.quelle
"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
siehe"private-module": "git+https://gitlab+deploy-token-username:[email protected]/group_name/project"
your username
group_name
Obwohl es sich bei der Frage um Gitlab handelt, ist diese Frage in der Google-Suche recht gut platziert. Hier finden Sie weitere Informationen zum Beheben eines ähnlichen Problems, das ich mit Github erhalten habe.
Für mich hat es nur funktioniert, wenn ich nur die URL geändert habe. Hier sind die Schritte, die ich unternehmen musste, um dies zu beheben:
git+ssh://[email protected]:owner/repo.git#master
~/.ssh/config
erstellen Sie die Datei, falls sie nicht vorhanden ist), um die Verwendung des DeployKey anstelle des Standard-SSH-Schlüssels zu erzwingenDanach hat die npm-Installation einfach funktioniert. Alle anderen Optionen und Lösungen resultierten aus dem Bruch der npm-Installation
quelle
:owner
?~/.ssh/config
? Ich komme immer noch nicht mit npm / gitlab durchNur für alle andere , die über diese stolpert, konnte ich es überhaupt nicht bekommen arbeitet über HTTPS - scheint es nicht den Link zu dem Repo (zB nicht unterstützt
https://git.domain.com/user/somerepo.git
), noch nicht unterstützt das.tar
,.tar.bz
oder.zip
Archiv - Versionen.Es scheint nur mit dem
.tar.gz
Archiv zu funktionieren .Vollständiges Beispiel (mit markierter Version):
https://git.domain.com/user/somerepo/repository/archive.tar.gz?ref=v1.2.3
quelle
Keine der anderen Antworten hat für mich für ein privates Repo von gitlab.com funktioniert ...
Dies funktioniert jedoch:
npm i -S git+ssh://[email protected]:<org>/<project>.git
Es ist nur die git ssh-Klon-URL aus dem Eingabefeld "Klon" der Projektseite
git+ssh://
, die vorne hinzugefügt wurde.quelle
Soweit ich das beurteilen kann, ist das
git://
Protokoll falsch . GitLab unterstützt nur HTTP (s) und SSH für Klone. Sie müssen also eine dieser Methoden anstelle des Git-Protokolls verwenden.quelle
Für mich setzt die package.json wie folgt funktioniert.
Das Token erhalten Sie von Ihren "Profileinstellungen - Zugriffstoken".
quelle
Wenn Sie eine Umgebungsvariable verwenden möchten, die das Token anstelle des fest codierten Tokens in der URL enthält, habe ich eine Lösung gefunden, die selbst schwierig und recht komplex ist. Wir werden die
GIT_ASKPASS
Umgebungsvariable verwenden, um das Passwort von einem Bash-Skript abzurufen. Dieses Skript gibt eine Umgebungsvariable wieder. Um zu überwinden, dass npm nur bestimmte GIT-Umgebungsvariablen übergibt, werden wirGIT_SSH
als Middle Man verwenden.Also, da
git_pass_env.sh
enthaltenecho $GIT_SSH
wir einfach anrufen:Ein Beispielprojekt mit Docker und Docker-Compose finden Sie in meinem Repo hier .
Flussdiagramm der Umgebungsvariablen:
quelle
Gitlab verfügt jetzt über eine Paketregistrierung, in der npm-Pakete erstellt, bereitgestellt und gehostet werden können. Mit privaten Repositorys ist es möglich, eine genaue Zugriffskontrolle über den Repository-Inhalt und die Pakete bereitzustellen.
NPM-Pakete können aus privaten Gitlab-Repositorys installiert werden, indem eine
.npmrc
Datei hinzugefügt wirdpackage.json
. Mehr Infos hier . Obwohl es kompliziert wird, wenn mehrere Bereitstellungstoken für verschiedene Repositorys in derselben Codebasis verwendet werden.Mit Gitlab ist es möglich,
.tgz
direkt mit HTTPS auf die Paketdatei zuzugreifen und Token bereitzustellen . Fügen Sie einfach die Projektabhängigkeit wie folgt hinzu:@ foo / bar ist zweimal in der URL vorhanden. @foo ist der Projektumfang und bar ist der Modulname und 1.0.0 ist der Modulname. Projekt-ID (8-stellig numerisch) ist die Gitlab-Projekt-ID, die auf der Projektseite unter dem Namen angezeigt wird. Es ist sogar möglich, @foo im Modulnamen wegzulassen (aber nicht im Link).
Durch die Verwendung mehrerer Module mit demselben Bereich und unterschiedlichen Bereitstellungstoken wird die Verwaltung privater Repositorys sicher. Deploy-Token haben möglicherweise nur Zugriff, sodass
package registry
der Endbenutzer nicht über die Repositorys auf den vollständigen Quellcode zugreifen kann.quelle