Estamos usando o GitLab para nosso projeto privado. Existem algumas bibliotecas bifurcadas do github, que queremos instalar como módulo npm. A instalação desse módulo diretamente do npm está ok e, por exemplo:
npm install git://github.com/FredyC/grunt-stylus-sprite.git
... funciona corretamente também, mas fazendo o mesmo para GitLab, apenas mudar de domínio me dá esse erro.
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
Na interface da web do GitLab, tenho este URL
[email protected]:library/grunt-stylus-sprite.git
. Executando isso contra npm install
ele tenta instalar o git
módulo do registro npm.
No entanto, usar URL: de [email protected]:library/grunt-stylus-sprite.git
repente está me pedindo a senha. Minha chave SSH não inclui senha, então presumo que não foi possível carregar essa chave. Talvez haja alguma configuração para que eu tenha esquecido? A chave está localizada no local padrão em meu diretório inicial com o nome "id_rsa"
.
Estou no Windows 7 x64.
ATUALIZAR
Desde o NPM v3, há suporte integrado para GitLab e outras fontes (BitBucket, Gist), de onde você pode instalar pacotes. Infelizmente, ele funciona apenas para os públicos, então não está exatamente relacionado a isso, mas alguns podem achar útil.
npm install gitlab:<gitlabname>/<gitlabrepo>[#<commit-ish>]
Confira a documentação: https://docs.npmjs.com/cli/install
<placeholders>
que tentei várias variações e ainda diz que projeto não encontrado.$ npm i -S git+ssh://[email protected]/org/repo.git
não funcionaRespostas:
Você tem os seguintes métodos para se conectar a um repositório gitlab privado
Com SSH
Com HTTPS
Com HTTPS e implantar token
fonte
Repository#1.2.3
. Vou mudar a marca de resposta, pois é mais precisa.git+ssh://[email protected]/Username/Repository
(observe / separando host e nome de usuário). Isso pode ser uma coisa específica do fio, talvez o exemplo sugerido funcione com npm<token-name>
no exemplo parecegitlab+deploy-token-17034
, não é o nome arbitrário que você atribui ao token.Em vez de
git://
, usegit+ssh://
e npm deve fazer a coisa certa.fonte
undefined ls-remote <url>
Atualizar
Como @felix mencionou nos comentários (obrigado @felix), usar
deploy token
é muito mais relevante para ler um registro privado nogitlab
. Dessa forma, o token fica comprometido, o invasor pode apenas ler o repositório e não pode fazer alterações.Criação de um token de implantação
GitLab
conta.Expand
seção Implementar Tokens.read_repository
Resposta antiga
Vá para
User Settings > Access Tokens
e crie um novoaccess token
comread_registry
permissão.Cópia gerada
token
, precisamos dela para nossopackage.json
arquivo.Agora
package.json
adicione odependency
seguinte:Substitua
Xaqron
pelo seu nome de usuário etoken
pelo token gerado. Você pode especificarbranch
etag
no final do url por#{branch|tag}
.Nota: Como o token de acesso está localizado em
package.json
qualquer pessoa que tenha acesso a este projeto pode ler o repositório, então presumo que seu projeto seja privado.fonte
"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
veja"private-module": "git+https://gitlab+deploy-token-username:[email protected]/group_name/project"
your username
group_name
Embora a pergunta seja sobre o Gitlab, ela está muito bem classificada na pesquisa do Google, então aqui estão mais algumas informações sobre como consertar um problema semelhante que tive com o Github.
Para mim, só mudar o url não funcionou. Aqui estão as etapas que tive que seguir para corrigir isso:
git+ssh://[email protected]:owner/repo.git#master
~/.ssh/config
crie o arquivo se ele não existir) para forçar o uso da DeployKey em vez da chave ssh padrãoDepois disso, a instalação do npm simplesmente funcionou. Todas as outras opções e soluções resultaram da interrupção da instalação do npm
fonte
:owner
?~/.ssh/config
? Ainda não estou conseguindo terminar com npm / gitlabApenas para qualquer outra pessoa que se depara com isso, eu não poderia fazê-lo funcionar através de HTTPS em tudo - parece que não suporta o link direto para o repo (por exemplo
https://git.domain.com/user/somerepo.git
), nem apoiar o.tar
,.tar.bz
ou.zip
versões de arquivo.Parece funcionar apenas com o
.tar.gz
arquivo.Exemplo completo (com versão marcada):
https://git.domain.com/user/somerepo/repository/archive.tar.gz?ref=v1.2.3
fonte
Nenhuma das outras respostas funcionou para mim para um repositório gitlab.com privado ...
No entanto, isso funciona:
npm i -S git+ssh://[email protected]:<org>/<project>.git
É apenas o url do clone do git ssh do campo de entrada "clone" da página do projeto
git+ssh://
adicionado à frente dele.fonte
Pelo que eu posso dizer onde você está errado é o
git://
protocolo. O GitLab só oferece suporte a HTTP (s) e SSH para clones. Portanto, você deve usar um desses métodos em vez do protocolo git.fonte
Para mim, defina o package.json como funciona abaixo.
O token é obtido em "Configurações do perfil - Token de acesso".
fonte
Se você quiser usar uma variável de ambiente contendo o token em vez de um token codificado na URL, eu vim com uma solução ainda bastante complexa. Usaremos a
GIT_ASKPASS
variável de ambiente para obter a senha de um script bash, esse script ecoará uma variável de ambiente. Para superar o npm, passando apenas variáveis de ambiente GIT específicas, usaremosGIT_SSH
como intermediário.Então, dado
git_pass_env.sh
contendoecho $GIT_SSH
, podemos apenas chamar:Para um projeto de exemplo com docker e docker-compose, veja meu repo aqui .
Diagrama de fluxo de variáveis de ambiente:
fonte
Gitlab agora possui um registro de pacote onde é possível construir, implantar e hospedar pacotes npm. Com repositórios privados, é possível fornecer controle de acesso refinado sobre o conteúdo do repositório e os pacotes.
Os pacotes NPM podem ser instalados de repositórios Gitlab privados, adicionando um
.npmrc
arquivo ao ladopackage.json
. Mais informações aqui . Embora seja complicado usar vários tokens de implantação para diferentes repositórios na mesma base de código.Com o Gitlab é possível acessar o
.tgz
arquivo do pacote diretamente com HTTPS e implantar o token . Basta adicionar a dependência do projeto como esta:@ foo / bar está presente duas vezes no URL. @foo é o escopo do projeto e bar é o nome do módulo e 1.0.0 é o nome do módulo. project-id (numérico de 8 dígitos) é o ID do projeto Gitlab, que pode ser visto na página do projeto sob o nome. É possível até omitir @foo do nome do módulo (mas não do link).
Usar vários módulos com o mesmo escopo e diferentes tokens de implantação torna seguro o gerenciamento de repositórios privados. Além disso, os tokens de implantação só podem ter acesso
package registry
, o que significa que o usuário final não será capaz de acessar o código-fonte completo dos repositórios.fonte