Nous utilisons GitLab pour notre projet privé. Il existe des bibliothèques fourchues 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
. L'exécution de cela contre npm install
elle tente d'installer le git
module à partir du registre npm.
Cependant, utiliser URL: [email protected]:library/grunt-stylus-sprite.git
me demande soudainement le mot de passe. Ma clé SSH n'inclut pas de phrase de passe, donc je suppose qu'elle n'a pas pu charger cette clé. Peut-être y a-t-il une configuration que j'ai manquée? La clé se trouve à l'emplacement standard de mon répertoire personnel avec le nom "id_rsa"
.
Je suis sous Windows 7 x64.
METTRE À JOUR
Depuis NPM v3, il existe une prise en charge intégrée de GitLab et d'autres sources (BitBucket, Gist), à partir desquelles vous pouvez installer des packages. Malheureusement, cela ne fonctionne que pour les publics, donc ce n'est pas exactement lié à cela, mais certains pourraient le trouver utile.
npm install gitlab:<gitlabname>/<gitlabrepo>[#<commit-ish>]
Consultez la documentation: https://docs.npmjs.com/cli/install
<placeholders>
j'ai essayé plusieurs variantes et il est toujours indiqué que le projet n'a pas été trouvé.$ npm i -S git+ssh://[email protected]/org/repo.git
ne fonctionne pasRéponses:
Vous disposez des méthodes suivantes pour vous connecter à un référentiel gitlab privé
Avec SSH
Avec HTTPS
Avec HTTPS et déployer le jeton
la source
Repository#1.2.3
. Je changerai le tick de réponse car c'est plus précis.git+ssh://[email protected]/Username/Repository
(notez le / séparant l'hôte et le nom d'utilisateur). Cela peut être une chose spécifique au fil, peut-être que l'exemple suggéré fonctionne avec npm<token-name>
dans l'exemplegitlab+deploy-token-17034
, ce n'est pas le nom arbitraire que vous attribuez au jeton.Au lieu de
git://
, usegit+ssh://
et npm devraient faire la bonne chose.la source
undefined ls-remote <url>
Mettre à jour
Comme @felix l'a mentionné dans les commentaires (merci @felix), l'utilisation
deploy token
est beaucoup plus pertinente pour lire un registre privé surgitlab
. De cette façon, le jeton est compromis, l'attaquant peut simplement lire ce référentiel et ne peut pas apporter de modifications.Création d'un jeton de déploiement
GitLab
compte.Expand
section Déployer des jetons.read_repository
Ancienne réponse
Aller
User Settings > Access Tokens
et créer un nouveauaccess token
avec laread_registry
permission.Copie générée
token
, nous en avons besoin pour notrepackage.json
fichier.Maintenant,
package.json
ajoutez ledependency
comme ci-dessous:Remplacez
Xaqron
par votre nom d'utilisateur ettoken
par le jeton généré. Vous pouvez spécifierbranch
ettag
à la fin de l'url par#{branch|tag}
.Remarque: Étant donné que le jeton d'accès est situé dans
package.json
toute personne ayant accès à ce projet peut lire le référentiel, je suppose donc que votre projet est lui-même privé.la source
"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
see"private-module": "git+https://gitlab+deploy-token-username:[email protected]/group_name/project"
your username
group_name
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 que j'ai rencontré avec Github.
Pour moi, seule la modification de l'URL ne l'a pas fait fonctionner. Voici les étapes à suivre pour résoudre ce problème:
git+ssh://[email protected]:owner/repo.git#master
~/.ssh/config
créez le fichier s'il n'existe pas) pour forcer l'utilisation de DeployKey au lieu de la clé ssh par défautAprès cela, l'installation de npm a tout simplement fonctionné. Toutes les autres options et solutions résultent de la rupture de l'installation de npm
la source
:owner
?~/.ssh/config
? Je n'ai toujours pas fini avec npm / gitlabJuste pour tous ceux qui trébuchent sur cela, je ne pouvais pas du tout le faire fonctionner sur HTTPS - il semble qu'il ne prend pas en charge le lien direct vers le dépôt (par exemple
https://git.domain.com/user/somerepo.git
), ni ne prend en charge le.tar
,.tar.bz
ou.zip
des versions d' archives.Cela semble fonctionner uniquement avec le
.tar.gz
archive.Exemple complet (avec version balisée):
https://git.domain.com/user/somerepo/repository/archive.tar.gz?ref=v1.2.3
la source
Aucune des autres réponses n'a fonctionné pour moi pour un dépôt gitlab.com privé ...
Cela fonctionne cependant:
npm i -S git+ssh://[email protected]:<org>/<project>.git
C'est juste l'url du clone git ssh du champ de saisie "clone" de la page du projet avec l'
git+ssh://
ajout au début de celui-ci.la source
Pour autant que je sache, où vous vous trompez, c'est le
git://
protocole. GitLab ne prend en charge que HTTP (s) et SSH pour les clones. Vous devez donc utiliser l'une de ces méthodes au lieu du protocole git.la source
Pour moi, définissez le package.json comme ci-dessous fonctionne.
Le jeton est obtenu à partir de vos "Paramètres de profil - Jeton d'accès".
la source
Si vous souhaitez utiliser une variable d'environnement contenant le jeton au lieu d'un jeton codé en dur dans l'URL, j'ai proposé une solution même difficile assez complexe. Nous utiliserons la
GIT_ASKPASS
variable d'environnement pour obtenir le mot de passe d'un script bash, ce script fera écho à une variable d'environnement. Pour surmonter npm en passant uniquement des variables d'environnement GIT spécifiques, nous utiliseronsGIT_SSH
comme intermédiaire.Donc, étant donné
git_pass_env.sh
contenant,echo $GIT_SSH
nous pouvons simplement appeler:Pour un exemple de projet avec docker et docker-compose, consultez mon dépôt ici .
Diagramme de flux des variables d'environnement:
la source
Gitlab dispose désormais d'un registre de packages dans lequel il est possible de créer, déployer et héberger des packages npm. Avec les référentiels privés, il est possible de fournir un contrôle d'accès précis sur le contenu du référentiel et les packages.
Les packages NPM peuvent être installés à partir de référentiels Gitlab privés en ajoutant un
.npmrc
fichier à côtépackage.json
. Plus d'infos ici . Bien que cela devienne compliqué lors de l'utilisation de plusieurs jetons de déploiement pour différents référentiels dans la même base de code.Avec Gitlab, il est possible d'accéder au
.tgz
fichier de package directement avec HTTPS et de déployer un jeton . Ajoutez simplement la dépendance du projet comme ceci:@ foo / bar est présent deux fois dans l'URL. @foo est la portée du projet et bar est le nom du module et 1.0.0 est le nom du module. project-id (8 chiffres numériques) est l'ID du projet Gitlab, qui peut être vu à partir de la page du projet sous le nom. Il est même possible d'omettre @foo du nom du module (mais pas du lien).
L'utilisation de plusieurs modules avec la même portée et différents jetons de déploiement sécurise la gestion des référentiels privés. De plus, les jetons de déploiement peuvent uniquement avoir accès à
package registry
ce qui signifie que l'utilisateur final ne pourra pas accéder au code source complet à partir des référentiels.la source