Gitlab özel deposundan npm modülünü yükleyin


101

Özel projemiz için GitLab kullanıyoruz . Github'da npm modülü olarak kurmak istediğimiz bazı çatallı kütüphaneler var. Bu modülü doğrudan npm'den kurmak tamamdır ve örneğin bu:

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

... de doğru çalışıyor, ancak aynısını GitLab için yapmak, sadece etki alanını değiştirmek bana bu hatayı alıyor.

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

GitLab'ın web arayüzünden bu URL'ye sahibim git@git.domain.com:library/grunt-stylus-sprite.git. Buna karşı çalıştırmak, modülü npm kayıt defterinden npm installyüklemeye çalışır git.

Ancak URL'yi kullanmak git+ssh@git.domain.com:library/grunt-stylus-sprite.gitaniden benden şifre soruyor. SSH anahtarım parola içermiyor, bu yüzden bu anahtarı yükleyemediğini varsayıyorum. Belki bunun için kaçırdığım bir konfigürasyon vardır? Anahtar, ana dizinimde adı ile standart konumda bulunur "id_rsa".

Windows 7 x64 kullanıyorum.

GÜNCELLEME

NPM v3'ten bu yana, paketleri yükleyebileceğiniz GitLab ve diğer kaynaklar (BitBucket, Gist) için yerleşik destek vardır. Maalesef yalnızca halka açık olanlar için çalışır, bu nedenle tam olarak bununla ilgili değildir, ancak bazıları yararlı bulabilir.

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

Belgelere göz atın: https://docs.npmjs.com/cli/install


1
Öyleyse kullandığım gerçek gitlab url'si nedir? Sadece <placeholders>birkaç varyasyon denediğimi görüyorum ve hala proje bulunamadı diyor.
chovy

1
$ npm i -S git+ssh://git@gitlab.com/org/repo.gitçalışmıyor
chovy

Yanıtlar:


162

Özel bir gitlab havuzuna bağlanmak için aşağıdaki yöntemlere sahipsiniz

SSH ile

git+ssh://git@git.mydomain.com:Username/Repository#{branch|tag}
git+ssh://git@git.mydomain.com/Username/Repository#{branch|tag}

HTTPS ile

git+https://git@git.mydomain.com/Username/Repository#{branch|tag}

HTTPS ve dağıtım belirteci ile

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

Evet, hemen hemen bunu anladım. Hatta dal veya etiket gibi belirtebilirsiniz Repository#1.2.3. Bu daha doğru olduğu için cevap işaretini değiştireceğim.
FredyC

1
@jamessidhu Emin değilim ama SSH ile bile bana şifre soruyor. Şifre verdikten sonra hata veriyor. Nasıl çözüleceğine dair bir fikrin var mı?
codesnooker

@codesnooker Gitlab'da bir SSH anahtarı kurdunuz mu? Anahtarlar, makineniz ile uzaktaki arasında yetkilendirilmemişse, bir sunucuya erişim gibi varsayılan olarak parola olacaktır.
sidhuko

5
Bu aslında benim için sadece gerçek URL sözdizimi ile işe yarar, örneğin git+ssh://git@git.mydomain.com/Username/Repository(ana bilgisayar ve kullanıcı adını / ayıran nota dikkat edin). Bu, ipliğe özgü bir şey olabilir, belki önerilen örnek npm ile çalışıyor
Ivo van der Wijk

1
deploy token harika çalışıyor. <token-name>Örnekte gitlab+deploy-token-17034, jetona atadığınız keyfi ad değil gibi görünüyor .
Mr5o1

26

Bunun yerine git://use git+ssh://ve npm doğru olanı yapmalıdır.


5
Cevap: npm creator kendisi 👆
Dima Parzhitsky

I getundefined ls-remote <url>
chovy

git + ssh: git@git.mydomain.com/Username/Repositor, kaldır // benim için çalışıyor. Thx
AliasCocoa

24

Güncelleme

@Felix'in yorumlarda bahsettiği gibi (teşekkürler @felix) kullanımı deploy token, özel bir kayıt defterini okumak için çok daha önemlidir gitlab. Bu şekilde token tehlikeye atılır, saldırgan sadece o depoyu okuyabilir ve değişiklik yapamaz.

Dağıtım Jetonu Oluşturma

  1. Hesabınıza giriş yapın GitLab.
  2. Dağıtım Jetonları oluşturmak istediğiniz projeye gidin.
  3. Ayarlar> Depo'ya gidin.
  4. ExpandJetonları Dağıt bölümüne tıklayın .
  5. Jeton için bir ad ve isteğe bağlı olarak bir son kullanma tarihi seçin.
  6. İstenen kapsamları seçin. <= seçinread_repository
  7. Dağıtım jetonu oluştur'a tıklayın.
  8. Dağıtım jetonunu güvenli bir yere kaydedin. Sayfayı terk ettiğinizde veya yenilediğinizde bir daha erişemezsiniz.

Eski cevap

Goto User Settings > Access Tokensve yeni oluşturmak access tokenile read_registryizniyle.

görüntü açıklamasını buraya girin

Kopya oluşturuldu token, package.jsondosyamız için ona ihtiyacımız var .

görüntü açıklamasını buraya girin

Şimdi aşağıdaki gibi package.jsonekleyin dependency:

"my-module": "git+https://Xaqron:token@gitlab.com/Xaqron/my-module"

Değiştir Xaqronkullanıcı adınızla ve tokenjetonu oluşturulur ile. Belirtebilirsiniz branchve tagtarafından url sonunda #{branch|tag}.

Not: Erişim belirteci package.jsonbu projeye erişimi olan herkes depoyu okuyabilir, bu nedenle projenizin özel olduğunu varsayıyorum.


5
Diğer yol, söz konusu depo için bir Dağıtım Jetonu oluşturmaktır. Ardından, tüm depolarınız için okuma erişimi sağlamaz. "private-module": "git+https://gitlab+deploy-token-username:deploy-token@gitlab.com/you/project",
Chris Sattinger

npm ERR! enoent undefined ls-remote -h -t https://puump:pass@gitlab.com/puump/puump-content.git
chovy

2
@chovy: Install git see
Xaqron

2
Ayrıca şunu da belirtmek isterim ki, projeniz bir grubun içindeyse, bunu tanımlamalısınız: "private-module": "git+https://gitlab+deploy-token-username:deploy-token@gitlab.com/group_name/project"bunun yerine , proje adından önce your usernametanımlamalısınızgroup_name
sfarzoso

8

Soru Gitlab ile ilgili olmasına rağmen, bu soru google aramada oldukça iyi sıralanmıştır, bu nedenle burada Github ile yaşadığım benzer bir sorunu nasıl düzeltebileceğim hakkında biraz daha bilgi var.

Benim için yalnızca url'yi değiştirmek işe yaramadı. İşte bunu düzeltmek için atmam gereken adımlar:

  • git+ssh://git@github.com:owner/repo.git#master
  • Bir dağıtım anahtarı oluşturun ve bunu depoya ekleyin
  • ~/.ssh/configVarsayılan ssh anahtarı yerine DeployKey kullanımını zorlamak için git yapılandırmasını düzenleyin ( mevcut değilse dosyayı oluşturun)

Bundan sonra npm kurulumu basitçe çalıştı. Diğer tüm seçenekler ve çözümler npm kurulumunun bozulmasıyla sonuçlandı


bu bir yazım hatası olmalı. :owner?
chovy

1
ben ne ile yapacağız ~/.ssh/config? Hala npm / gitlab ile anlaşamıyorum
chovy

6

Sadece buna rastlayan herhangi biri için, HTTPS üzerinden çalışmasını hiç sağlayamadım - depoya doğrudan bağlantıyı desteklemiyor (örn. https://git.domain.com/user/somerepo.git) .tar, .tar.bzVeya veya .ziparşiv sürümlerini desteklemiyor gibi görünüyor .

Sadece .tar.gzarşivle çalışıyor gibi görünüyor .

Tam örnek (etiketli sürümle):

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


6

Özel bir gitlab.com deposu için diğer cevapların hiçbiri benim için işe yaramadı ...

Ancak bu çalışır:

npm i -S git+ssh://git@gitlab.com:<org>/<project>.git

Proje sayfasının "clone" giriş alanındaki git ssh clone url'si git+ssh://, önüne eklenmiştir.


1
ssh ortak anahtarınızın gitlab hesabında zaten kurulu olduğu göz önüne alındığında bu çalışır.
lasec0203

3

Nerede yanlış yaptığını anlayabildiğim kadarıyla git://protokol. GitLab, klonlar için yalnızca HTTP (s) ve SSH'yi destekler. Yani git protokolü yerine bu yöntemlerden birini kullanmalısınız.


3

Benim için package.json'u aşağıdaki gibi ayarlayın.

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

Jeton, "Profil Ayarları - Erişim Jetonunuz" dan alınır.


Bu benim için de çalıştı. Kendinden imzalı sertifikaya sahip bir proxy arkasında çalışıyorum.
Stefano Mozart

bu aslında benim için çalıştı, ancak tokeni package.json'da bırakmak iyi bir fikirdir, çünkü başkaları onu yazmak için kullanabilir mi? gitlab (en azından benim durumumda) salt okunur erişim belirteci oluşturmama izin vermiyor, yalnızca tam erişimli bir simge oluşturmama izin veriyor. ne düşünüyorsun?
cancerbero

Not: GitLab 10.7 (Nisan 2018'de yayınlandı) proje düzeyinde "Deploy Token" ekledi. Bunlar, kullanıcı düzeyinde "Erişim Jetonu" yerine kullanılmalıdır. docs bağlantısı

1

Gitlab artık npm paketleri oluşturmanın, dağıtmanın ve barındırmanın mümkün olduğu bir paket kayıt defterine sahiptir. Özel havuzlarla, depo içerikleri ve paketler üzerinde ayrıntılı erişim kontrolü sağlamak mümkündür.

NPM Paketleri, .npmrcyanına bir dosya eklenerek özel Gitlab depolarından kurulabilir package.json. Daha fazla bilgi burada . Aynı kod tabanında farklı depolar için birden fazla dağıtım belirteci kullanıldığında karmaşıklaşsa da.

Gitlab ile paket .tgzdosyasına doğrudan HTTPS ile erişmek ve jetonu dağıtmak mümkündür . Basitçe proje bağımlılığını şu şekilde ekleyin:

"@foo/bar": "https://<username>:<token>@gitlab.com/api/v4/projects/<project-id>/packages/npm/@foo/bar/-/@foo/bar-1.0.0.tgz"

@ foo / bar URL'de iki kez bulunur. @foo, proje kapsamıdır ve çubuk modül adıdır ve 1.0.0, modül adıdır. proje kimliği (8 basamaklı sayısal), adı altında proje sayfasından görülebilen Gitlab proje kimliğidir. @Foo modül adından bile çıkarılabilir (ancak bağlantı olamaz).

Aynı kapsam ve farklı dağıtım belirteçlerine sahip birden çok modül kullanmak, özel depoların yönetimini güvenli hale getirir. Ayrıca Deploy belirteçleri yalnızca erişime sahip olabilir package registry, bu da son kullanıcının depolardan kaynak kodunun tamamına erişemeyeceği anlamına gelir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.