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 git
módulo desde el registro npm.
Sin embargo, el uso de URL: de [email protected]:library/grunt-stylus-sprite.git
repente 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.git
no 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-17034
que 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 token
es 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
GitLab
cuenta.Expand
sección Implementar tokens.read_repository
Respuesta antigua
Vaya
User Settings > Access Tokens
y cree uno nuevoaccess token
conread_registry
permiso.Copia generada
token
, la necesitamos para nuestropackage.json
archivo.Ahora
package.json
agregue lodependency
siguiente:Reemplácelo
Xaqron
con su nombre de usuario ytoken
con el token generado. Puede especificarbranch
ytag
al final de la URL mediante#{branch|tag}
.Nota: Dado que el token de acceso se encuentra en
package.json
cualquier 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.git
git
Ver instalación"private-module": "git+https://gitlab+deploy-token-username:[email protected]/group_name/project"
entonces en lugar deyour username
, debe definirgroup_name
antes 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/config
cree 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.bz
o.zip
las versiones de archivo.Solo parece funcionar con el
.tar.gz
archivo.Ejemplo completo (con versión etiquetada):
https://git.domain.com/user/somerepo/repository/archive.tar.gz?ref=v1.2.3
fuente
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>.git
Es 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_ASKPASS
variable 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_SSH
como intermediario.Entonces, dado que
git_pass_env.sh
contieneecho $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
.npmrc
archivo 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
.tgz
archivo 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 registry
que significa que el usuario final no podrá acceder al código fuente completo de los repositorios.fuente