web-dev-qa-db-fra.com

Installer le module npm à partir du référentiel privé gitlab

Nous utilisons GitLab pour notre projet privé. Il y a des bibliothèques forkées de github, que nous voulons installer en tant que module npm. L'installation de ce module directement à partir de npm est ok et par exemple ceci:

npm install git://github.com/FredyC/grunt-stylus-Sprite.git

... fonctionne correctement aussi, mais faire la même chose pour GitLab, changer de domaine me donne cette erreur.

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

Depuis l'interface Web de GitLab, j'ai cette URL [email protected]:library/grunt-stylus-Sprite.git. Exécuter ceci contre npm install _ il tente d’installer git module à partir du registre npm.

Cependant, en utilisant l'URL: [email protected]:library/grunt-stylus-Sprite.git me demande soudain le mot de passe. Ma clé SSH n'inclut pas de phrase secrète, donc je suppose qu'elle n'a pas été en mesure de charger cette clé. Peut-être y a-t-il une configuration pour celle que j'ai manquée? La clé se trouve à l’emplacement standard de mon répertoire personnel sous le nom "id_rsa".

Je suis sur Windows 7 x64.

[~ # ~] met à jour [~ # ~]

Depuis NPM v3, GitLab et d’autres sources (BitBucket, Gist) sont intégrés, à partir desquels vous pouvez installer des packages. Malheureusement, cela ne fonctionne que pour les publics, donc ce n'est pas exactement lié à cela, mais certains pourraient trouver cela utile.

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

Consultez la documentation: https://docs.npmjs.com/cli/install

73
FredyC

Vous avez les méthodes suivantes pour vous connecter à un référentiel privé gitlab

avec SSH

git+ssh://[email protected]:Username/Repository#{branch|tag}
git+ssh://[email protected]/Username/Repository#{branch|tag}

avec HTTPS

git+https://[email protected]/Username/Repository#{branch|tag}

avec HTTPS et jeton de déploiement

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

Au lieu de git://, utilisation git+ssh:// et NPM devraient faire le bon choix.

19
isaacs

Mettre à jour

Comme @felix mentionné dans les commentaires (merci @felix) en utilisant deploy token est beaucoup plus pertinent pour lire un registre privé sur gitlab. De cette façon, le jeton est compromis, l’attaquant ne peut que lire ce référentiel et ne peut pas apporter de modifications.

Création d'un jeton de déploiement

  1. Connectez-vous à votre compte GitLab.
  2. Accédez au projet pour lequel vous souhaitez créer des jetons de déploiement.
  3. Allez dans Paramètres> Repository.
  4. Cliquez sur Expand dans la section Déployer les jetons.
  5. Choisissez un nom et éventuellement une date d'expiration pour le jeton.
  6. Choisissez les portées souhaitées. <= sélectionnez read_repository
  7. Cliquez sur Créer un jeton de déploiement.
  8. Enregistrez le jeton de déploiement dans un endroit sûr. Une fois que vous avez quitté ou actualisé la page, vous ne pourrez plus y accéder.

Ancienne réponse

Aller à User Settings > Access Tokens et créer un nouveau access token avec read_registry autorisation.

enter image description here

Copie générée token, nous en avons besoin pour notre package.json fichier.

enter image description here

Maintenant en package.json ajoutez le dependency comme ci-dessous:

"my-module": "git+https://Xaqron:[email protected]/Xaqron/my-module"

Remplacez Xaqron par votre nom d'utilisateur et token par le jeton généré. Vous pouvez spécifier branch et tag à la fin de l'URL par #{branch|tag}.

Remarque: Le jeton d'accès étant situé dans package.json toute personne ayant accès à ce projet peut lire le référentiel, donc je suppose que votre projet est privé.

14
Xaqron

Bien que la question concerne Gitlab, cette question est assez bien classée dans la recherche Google. Voici donc quelques informations supplémentaires sur la façon de résoudre un problème similaire rencontré avec Github.

Pour moi, changer seulement l'URL ne le faisait pas fonctionner. Voici les étapes à suivre pour résoudre ce problème:

  • git+ssh://[email protected]:owner/repo.git#master
  • Créer une clé de déploiement et l'ajouter au référentiel
  • Editer la configuration de git (~/.ssh/config créer le fichier s'il n'existe pas) pour forcer l'utilisation de DeployKey au lieu de la clé ssh par défaut

Après cela, l’installation de npm a simplement fonctionné. Toutes les autres options et solutions résultent de la rupture d'installation de npm

6
Sephy

Pour tous ceux qui tombent sur un problème, je ne pouvais pas le faire fonctionner du tout avec HTTPS - il semble que cela ne supporte pas le lien direct vers le repo (par exemple, https://git.domain.com/user/somerepo.git), ni ne prend en charge le .tar, .tar.bz ou .Zip versions d'archives.

Cela ne semble fonctionner qu'avec le .tar.gz archive.

Exemple complet (avec la version marquée):

https://git.domain.com/user/somerepo/repository/archive.tar.gz?ref=v1.2.3

6
chrisf

Autant que je puisse dire où vous allez mal, le git:// protocole. GitLab ne supporte que HTTP (s) et SSH pour les clones. Vous devez donc utiliser l’une de ces méthodes à la place du protocole git.

3
Sam Gleske

Pour moi, le package.json comme ci-dessous fonctionne.

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

Le jeton provient de vos "Paramètres de profil - Jeton d'accès".

2
shentaoy

Aucune des autres réponses n'a fonctionné pour moi pour un dépôt privé de gitlab.com ...

Cela fonctionne cependant:

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

C'est juste l'URL de clone git ssh du champ de saisie "clone" de la page de projet avec git+ssh:// ajouté à l'avant de celui-ci.

2
chovy