Estamos usando GitLab para nuestro proyecto privado. Hay algunas bibliotecas bifurcadas de github, que queremos instalar como módulo npm. Instalar ese módulo directamente desde npm está bien y, por ejemplo, esto:
npm install git://github.com/FredyC/grunt-stylus-sprite.git
... también funciona correctamente, pero al hacer lo mismo para GitLab, solo cambiar el dominio me da este error.
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
Desde la interfaz web de GitLab, tengo esta URL
 [email protected]:library/grunt-stylus-sprite.git. Ejecutando esto en su contra npm install, intenta instalar el gitmódulo desde el registro npm.
Sin embargo, el uso de URL: de [email protected]:library/grunt-stylus-sprite.gitrepente me pide la contraseña. Mi clave SSH no incluye frase de contraseña, así que supongo que no pudo cargar esa clave. ¿Quizás hay alguna configuración que me he perdido? La clave se encuentra en la ubicación estándar de mi directorio personal con el nombre "id_rsa".
Estoy en Windows 7 x64.
ACTUALIZAR
Desde NPM v3 hay soporte incorporado para GitLab y otras fuentes (BitBucket, Gist), desde donde puede instalar paquetes. Desafortunadamente, solo funciona para los públicos, por lo que no está exactamente relacionado con esto, pero algunos pueden encontrarlo útil.
npm install gitlab:<gitlabname>/<gitlabrepo>[#<commit-ish>]
Consulte la documentación: https://docs.npmjs.com/cli/install

<placeholders>probé varias variaciones y todavía dice que no se encontró el proyecto.$ npm i -S git+ssh://[email protected]/org/repo.gitno funcionaRespuestas:
Tiene los siguientes métodos para conectarse a un repositorio privado de gitlab
Con SSH
Con HTTPS
Con HTTPS e implementa token
fuente
Repository#1.2.3. Cambiaré la marca de respuesta ya que es más precisa.git+ssh://[email protected]/Username/Repository(tenga en cuenta el / que separa el host y el nombre de usuario). Esto puede ser algo específico del hilo, quizás el ejemplo sugerido funcione con npm<token-name>en el ejemplo parecegitlab+deploy-token-17034que no es el nombre arbitrario que asigna al token.En lugar de
git://, usegit+ssh://y npm debería hacer lo correcto.fuente
undefined ls-remote <url>Actualizar
Como @felix mencionó en los comentarios (gracias @felix), el uso
deploy tokenes mucho más relevante para leer un registro privado engitlab. De esta manera, el token está comprometido, el atacante solo puede leer ese repositorio y no puede realizar cambios.Creación de un token de implementación
GitLabcuenta.Expandsección Implementar tokens.read_repositoryRespuesta antigua
Vaya
User Settings > Access Tokensy cree uno nuevoaccess tokenconread_registrypermiso.Copia generada
token, la necesitamos para nuestropackage.jsonarchivo.Ahora
package.jsonagregue lodependencysiguiente:Reemplácelo
Xaqroncon su nombre de usuario ytokencon el token generado. Puede especificarbranchytagal final de la URL mediante#{branch|tag}.Nota: Dado que el token de acceso se encuentra en
package.jsoncualquier persona que tenga acceso a este proyecto puede leer el repositorio, así que supongo que su proyecto es privado.fuente
"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.gitgitVer instalación"private-module": "git+https://gitlab+deploy-token-username:[email protected]/group_name/project"entonces en lugar deyour username, debe definirgroup_nameantes del nombre del proyectoAunque la pregunta es sobre Gitlab, esta pregunta está bastante bien clasificada en la búsqueda de Google, por lo que aquí hay más información sobre cómo solucionar un problema similar que tuve con Github.
Para mí, solo cambiar la URL no lo hizo funcionar. Estos son los pasos que tuve que seguir para solucionar este problema:
git+ssh://[email protected]:owner/repo.git#master~/.ssh/configcree el archivo si no existe) para forzar el uso de DeployKey en lugar de la clave ssh predeterminadaDespués de eso, la instalación de npm simplemente funcionó. Todas las demás opciones y soluciones resultaron de la interrupción de la instalación de npm
fuente
:owner?~/.ssh/config? Todavía no recibo a través de la NPM / gitlabSolo para cualquier otra persona que se encuentre con esto, no pude hacer que funcione en HTTPS en absoluto; parece que no admite el enlace directo al repositorio (por ejemplo
https://git.domain.com/user/somerepo.git), ni admite el.tar,.tar.bzo.ziplas versiones de archivo.Solo parece funcionar con el
.tar.gzarchivo.Ejemplo completo (con versión etiquetada):
https://git.domain.com/user/somerepo/repository/archive.tar.gz?ref=v1.2.3fuente
Ninguna de las otras respuestas me funcionó para un repositorio privado de gitlab.com ...
Sin embargo, esto funciona:
npm i -S git+ssh://[email protected]:<org>/<project>.gitEs solo la URL de clonación de git ssh del campo de entrada "clon" de la página del proyecto que se
git+ssh://agrega al frente.fuente
Por lo que puedo decir, lo que te equivocas es el
git://protocolo. GitLab solo admite HTTP (s) y SSH para clones. Entonces debes usar uno de esos métodos en lugar del protocolo git.fuente
Para mí, configure el package.json como funciona a continuación.
El token se obtiene de su "Configuración de perfil - Token de acceso".
fuente
Si desea utilizar una variable de entorno que contenga el token en lugar de un token codificado en la URL, se me ocurrió una solución incluso bastante compleja. Usaremos la
GIT_ASKPASSvariable de entorno para obtener la contraseña de un script bash, este script hará eco de una variable de entorno. Para superar npm pasando solo variables de entorno GIT específicas que usaremosGIT_SSHcomo intermediario.Entonces, dado que
git_pass_env.shcontieneecho $GIT_SSH, podemos simplemente llamar:Para un proyecto de ejemplo con docker y docker-compose, vea mi repositorio aquí .
Diagrama de flujo de variables ambientales:
fuente
Gitlab ahora tiene un registro de paquetes donde es posible construir, implementar y alojar paquetes npm. Con los repositorios privados, es posible proporcionar un control de acceso detallado sobre el contenido del repositorio y los paquetes.
Los paquetes NPM se pueden instalar desde repositorios privados de Gitlab agregando un
.npmrcarchivo al ladopackage.json. Más info aquí . Aunque se complica cuando se utilizan varios tokens de implementación para diferentes repositorios en la misma base de código.Con Gitlab es posible acceder al paquete
.tgzarchivo directamente con HTTPS e implementar el token . Simplemente agregue la dependencia del proyecto de esta manera:@ foo / bar está presente dos veces en la URL. @foo es el alcance del proyecto y bar es el nombre del módulo y 1.0.0 es el nombre del módulo. project-id (numérico de 8 dígitos) es el ID del proyecto de Gitlab, que se puede ver en la página del proyecto debajo del nombre. Incluso es posible omitir @foo del nombre del módulo (pero no del enlace).
El uso de varios módulos con el mismo alcance y diferentes tokens de implementación hace que la administración de repositorios privados sea segura. Además, los tokens de implementación solo pueden tener acceso, lo
package registryque significa que el usuario final no podrá acceder al código fuente completo de los repositorios.fuente