Gitlab निजी रिपॉजिटरी से npm मॉड्यूल स्थापित करें


97

हम अपने निजी प्रोजेक्ट के लिए GitLab का उपयोग कर रहे हैं । जीथब से कुछ कांटे वाले पुस्तकालय हैं, जिन्हें हम एनपीएम मॉड्यूल के रूप में स्थापित करना चाहते हैं। Npm से उस मॉड्यूल को सीधे इंस्टॉल करना ठीक है और उदाहरण के लिए:

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

... सही ढंग से भी काम करता है, लेकिन GitLab के लिए भी ऐसा करने से, बस डोमेन बदलने से मुझे यह त्रुटि मिलती है।

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 के वेब इंटरफ़ेस से, मेरे पास यह URL है git@git.domain.com:library/grunt-stylus-sprite.git। इस के खिलाफ चल रहा है npm रजिस्ट्री से मॉड्यूल npm installस्थापित करने की कोशिश करता है git

हालाँकि URL का उपयोग करना: git+ssh@git.domain.com:library/grunt-stylus-sprite.gitअचानक मुझसे पासवर्ड के लिए पूछ रहा है। मेरी SSH कुंजी में पासफ़्रेज़ शामिल नहीं है, इसलिए मुझे लगता है कि यह उस कुंजी को लोड करने में सक्षम नहीं था। शायद इसके लिए कुछ विन्यास है जो मैंने याद किया है? कुंजी नाम के साथ मेरे घर निर्देशिका में मानक स्थान पर स्थित है "id_rsa"

मैं विंडोज 7 x64 पर हूं।

अपडेट करें

NPM v3 के बाद से GitLab और अन्य स्रोतों (BitBucket, Gist) के लिए अंतर्निहित समर्थन है, जहां से आप पैकेज स्थापित कर सकते हैं। दुर्भाग्य से यह केवल सार्वजनिक लोगों के लिए काम करता है इसलिए यह ठीक से संबंधित नहीं है, लेकिन कुछ इसे उपयोगी पा सकते हैं।

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

प्रलेखन देखें: https://docs.npmjs.com/cli/install


1
तो क्या वास्तविक gitlab url मैं उपयोग कर रहा हूँ? मैं अभी देखता <placeholders>हूं मैंने कई बदलावों की कोशिश की और यह अभी भी कहता है कि परियोजना नहीं मिली।
चॉवि

1
$ npm i -S git+ssh://git@gitlab.com/org/repo.gitकाम नहीं करता है
chovy

जवाबों:


157

आपके पास एक निजी गिटलैब रिपॉजिटरी से जुड़ने के लिए निम्नलिखित विधियाँ हैं

एसएसएच के साथ

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

HTTPS के साथ

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

HTTPS और तैनाती टोकन के साथ

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

हाँ, यह बहुत ज्यादा है जो मुझे पता चला है। तुम भी शाखा या टैग की तरह निर्दिष्ट कर सकते हैं Repository#1.2.3। मैं उत्तर टिक बदल दूंगा क्योंकि यह अधिक सटीक है।
फ्रेडीसी

1
@jamessidhu मुझे यकीन नहीं है, लेकिन इसके पूछ मुझे SSH के साथ भी पासवर्ड। पासवर्ड देने पर यह मुझे त्रुटि दे रहा है। किसी भी विचार यह कैसे हल करने के लिए?
कोडनुकर

@codesnooker क्या आपने Gitlab में SSH कुंजी सेट की है ? यदि कुंजी आपकी मशीन और रिमोट के बीच अधिकृत नहीं है, तो यह एक सर्वर तक पहुंच की तरह पासवर्ड के लिए डिफ़ॉल्ट होगा।
सिधुक

5
यह वास्तव में केवल मेरे लिए सही URL सिंटैक्स के साथ काम करता है, उदाहरण के लिए git+ssh://git@git.mydomain.com/Username/Repository(होस्ट और उपयोगकर्ता नाम अलग करें)। यह एक यार्न की विशिष्ट बात हो सकती है, शायद सुझाया गया उदाहरण npm के साथ काम करता है
Ivo van der Wijk

1
टोकन काम करता है महान काम करता है। <token-name>उदाहरण में ऐसा लगता है gitlab+deploy-token-17034, यह मनमाना नाम नहीं है जिसे आप टोकन पर असाइन करते हैं।
Mr5o1

26

इसके बजाय git://, उपयोग git+ssh://और npm को सही काम करना चाहिए।


5
एनपीएम निर्माता से खुद का जवाब 👆
दिमित्री Parzhitsky

मैंundefined ls-remote <url>
chovy

git + ssh: git@git.mydomain.com/Username/Repositor, निकालें // यह मेरे लिए काम करता है। Thx
अलियासोकोआ

22

अपडेट करें

जैसा कि @felix ने टिप्पणियों में उल्लेख किया है (धन्यवाद @felix) deploy tokenनिजी रजिस्ट्री को पढ़ने के लिए बहुत अधिक प्रासंगिक है gitlab। इस तरह से टोकन से छेड़छाड़ की जाती है, हमलावर सिर्फ उस रिपॉजिटरी को पढ़ सकता है और बदलाव नहीं कर सकता है।

एक तैनात टोकन बनाना

  1. अपने GitLabखाते में प्रवेश करें ।
  2. उस प्रोजेक्ट पर जाएं जिसके लिए आप डिप्लॉय टोकन बनाना चाहते हैं।
  3. सेटिंग्स> रिपोजिटरी पर जाएं।
  4. ExpandDeploy टोकन अनुभाग पर क्लिक करें ।
  5. टोकन के लिए एक नाम और वैकल्पिक रूप से एक समाप्ति तिथि चुनें।
  6. इच्छित स्कॉप चुनें। <= चयन करेंread_repository
  7. क्रिएट परिनियोजित टोकन पर क्लिक करें।
  8. कहीं सुरक्षित रूप से टोकन को सहेजें। एक बार जब आप पृष्ठ छोड़ देते हैं या ताज़ा करते हैं, तो आप इसे फिर से एक्सेस नहीं कर पाएंगे।

पुराना उत्तर

गोटो User Settings > Access Tokensऔर अनुमति के access tokenसाथ एक नया बनाएँ read_registry

यहां छवि विवरण दर्ज करें

प्रतिलिपि बनाई गई token, हमें अपनी package.jsonफ़ाइल के लिए इसकी आवश्यकता है ।

यहां छवि विवरण दर्ज करें

अब नीचे दिए package.jsonअनुसार जोड़ें dependency:

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

Xaqronअपने उपयोगकर्ता नाम के tokenसाथ और उत्पन्न टोकन के साथ बदलें । आप url के अंत में branchऔर निर्दिष्ट कर सकते हैं ।tag#{branch|tag}

नोट: चूंकि एक्सेस टोकन package.jsonकिसी में भी स्थित है , जिसके पास इस प्रोजेक्ट की एक्सेस है, रिपॉजिटरी पढ़ सकता है, इसलिए मुझे लगता है कि आपका प्रोजेक्ट निजी है।


5
दूसरा तरीका यह है कि उस विशिष्ट रिपॉजिटरी के लिए एक डिप्लॉय टोकन बनाया जाए। तब यह आपके सभी रिपोज के लिए रीड एक्सेस प्रदान नहीं करता है। "private-module": "git+https://gitlab+deploy-token-username:deploy-token@gitlab.com/you/project",
क्रिस सैटिंगर

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

2
@chovy: स्थापित git देखें
Xaqron

1
मैं यह भी बताना चाहता हूं कि यदि आपकी परियोजना एक समूह के अंदर है, तो आपको इसे परिभाषित करना चाहिए: "private-module": "git+https://gitlab+deploy-token-username:deploy-token@gitlab.com/group_name/project"इसलिए इसके बजाय your username, आपको group_nameपरियोजना के नाम से पहले परिभाषित करना होगा
sfarzoso

8

यद्यपि यह सवाल गीतालाब के बारे में है, यह प्रश्न Google खोज में काफी अच्छी तरह से रैंक किया गया है, इसलिए यहां कुछ और जानकारी दी गई है कि मैं इसी तरह के मुद्दे को कैसे ठीक करूं, जो मुझे गितब के साथ मिला।

मेरे लिए, केवल यूआरएल को बदलने से यह काम नहीं करता है। इसे ठीक करने के लिए मुझे जो कदम उठाने थे, वे हैं:

  • git+ssh://git@github.com:owner/repo.git#master
  • एक तैनाती कुंजी बनाएं और इसे रेपो में जोड़ें
  • ~/.ssh/configडिफ़ॉल्ट ssh कुंजी के बजाय DeployKey के उपयोग के लिए बाध्य करने के लिए git config संपादित करें ( यदि यह मौजूद नहीं है तो फ़ाइल बनाएं)

उसके बाद npm स्थापित बस काम किया। अन्य सभी विकल्पों और समाधानों के परिणामस्वरूप npm स्थापित ब्रेकिंग हुई


यह एक टाइपो होना चाहिए। :owner?
chovy

1
मैं क्या करूँ ~/.ssh/config? मैं अभी भी npm / gitlab
chovy

6

बस किसी और ने इस भर में ठोकर के लिए, मैं यह सब पर अधिक HTTPS काम नहीं कर रहा हो सकता है - यह रेपो (जैसे के लिए सीधा लिंक का समर्थन नहीं करता लगता है https://git.domain.com/user/somerepo.git), और न ही इसका समर्थन करता है .tar, .tar.bzया .zipसंग्रह संस्करणों।

यह केवल .tar.gzसंग्रह के साथ काम करने लगता है ।

पूर्ण उदाहरण (टैग किए गए संस्करण के साथ):

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


5

अन्य किसी भी उत्तर ने मेरे लिए एक निजी gitlab.com रेपो के लिए काम नहीं किया ...

हालांकि यह काम करता है:

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

इसका सिर्फ git ssh क्लोन url प्रोजेक्ट पेज के "क्लोन" इनपुट फील्ड git+ssh://से है, जिसके सामने इसे जोड़ा गया है।


1
यह काम करता है, यह देखते हुए कि आपकी ssh सार्वजनिक कुंजी पहले से ही gitlab खाते पर सेट है।
लेसिक ०२०२

3

जहां तक ​​मैं बता सकता हूं कि आप कहां गलत हो रहे हैं git://प्रोटोकॉल है। क्लोन के लिए GitLab केवल HTTP (एस) और एसएसएच का समर्थन करता है। इसलिए आपको git प्रोटोकॉल के बजाय उन तरीकों में से एक का उपयोग करना चाहिए।


3

मेरे लिए नीचे दिए गए काम के अनुसार package.json सेट करें।

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

टोकन आपकी "प्रोफ़ाइल सेटिंग्स - एक्सेस टोकन" से प्राप्त होता है।


यह मेरे लिए भी काम किया। मैं स्वयं हस्ताक्षरित प्रमाण पत्र के साथ एक प्रॉक्सी के पीछे काम कर रहा हूं।
स्टेफानो मोजार्ट

यह वास्तव में मेरे लिए काम करता था, लेकिन मुझे आश्चर्य होता है कि क्या पैकेज में टोकन छोड़ना एक अच्छा विचार है। इसके बाद से अन्य इसे लिखने के लिए उपयोग कर सकते हैं? gitlab (कम से कम मेरे मामले में) मुझे केवल-पढ़ने के लिए पहुँच टोकन बनाने की अनुमति नहीं दे रहा है, बल्कि पूर्ण-पहुँच वाला है। तुम क्या सोचते हो?
कर्कबरो

नोट: GitLab 10.7 (अप्रैल 2018 को जारी) ने प्रोजेक्ट-स्तरीय "डिप्लॉय टोकन" जोड़ा। इनका उपयोग उपयोगकर्ता-स्तरीय "एक्सेस टोकन" के बजाय किया जाना चाहिए। डॉक्स लिंक

0

यदि आप URL में हार्डकोड किए गए टोकन के बजाय एक टोकन को पकड़े हुए एक पर्यावरण चर का उपयोग करना चाहते हैं , तो मैं एक समाधान के साथ आया और भी जटिल हो गया। हम GIT_ASKPASSबैश स्क्रिप्ट से पासवर्ड प्राप्त करने के लिए पर्यावरण चर का उपयोग करेंगे , यह स्क्रिप्ट पर्यावरण चर को प्रतिध्वनित करेगी। केवल विशिष्ट जीआईटी पर्यावरण चर पास करने वाले एनपीएम को पार करने के लिए हम GIT_SSHएक मध्यम व्यक्ति के रूप में उपयोग करेंगे।

तो, यह देखते हुए git_pass_env.shयुक्त echo $GIT_SSHहम सिर्फ कॉल कर सकते हैं:

GIT_SSH=<TOKEN> GIT_ASKPASS="$(pwd)/git_pass_env.sh" npm install

डॉकटर और डॉकटर-कंपोज़ के साथ एक उदाहरण परियोजना के लिए मेरे रेपो को यहां देखें

पर्यावरण चर प्रवाह आरेख:

प्रवाह आरेख


0

Gitlab के पास अब एक पैकेज रजिस्ट्री है जहाँ npm पैकेज बनाना, तैनात करना और होस्ट करना संभव है। निजी रिपॉजिटरी के साथ, रिपॉजिटरी सामग्री और पैकेजों पर ठीक-अनाज पहुंच नियंत्रण प्रदान करना संभव है।

एनपीएम पैकेज को एक .npmrcफाइल के साथ जोड़कर निजी गिटलैब रिपॉजिटरी से स्थापित किया जा सकता है package.json। अधिक जानकारी यहाँ । हालांकि यह एक ही कोडबेस में विभिन्न रिपॉजिटरी के लिए कई तैनात टोकन का उपयोग करते समय जटिल हो जाता है।

Gitlab के .tgzसाथ HTTPS के साथ सीधे पैकेज फ़ाइल को एक्सेस करना और टोकन को तैनात करना संभव है । बस इस तरह परियोजना निर्भरता जोड़ें:

"@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 में मौजूद है। @foo प्रोजेक्ट स्कोप है और बार मॉड्यूल नाम है और 1.0.0 मॉड्यूल नाम है। परियोजना-आईडी (8-अंकीय संख्यात्मक) Gitlab प्रोजेक्ट आईडी है, जिसे नाम के तहत प्रोजेक्ट पेज से देखा जा सकता है। मॉड्यूल नाम (लेकिन लिंक नहीं) से @foo भी छोड़ना संभव है।

एक ही स्कोप और अलग-अलग तैनात टोकन के साथ कई मॉड्यूल का उपयोग करना निजी रिपोजिटरी को सुरक्षित बनाता है। इसके अलावा, टोकन का उपयोग केवल उसी package registryसाधन तक पहुंच सकता है, जिसका अंत-उपयोगकर्ता रिपॉजिटरी से पूर्ण स्रोत कोड तक पहुंचने में सक्षम नहीं होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.