ติดตั้งโมดูล npm จากที่เก็บส่วนตัว gitlab


103

เรากำลังใช้GitLabสำหรับโครงการส่วนตัวของเรา มีบางไลบรารีที่แยกจาก github ที่เราต้องการติดตั้งเป็นโมดูล npm การติดตั้งโมดูลนั้นโดยตรงจาก 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 installมันพยายามติดตั้งgitโมดูลจากรีจิสทรี npm

อย่างไรก็ตามการใช้ URL: git+ssh@git.domain.com:library/grunt-stylus-sprite.gitจู่ๆก็ขอรหัสผ่านจากฉัน คีย์ SSH ของฉันไม่มีข้อความรหัสผ่านดังนั้นฉันจึงถือว่าไม่สามารถโหลดคีย์นั้นได้ อาจจะมีการกำหนดค่าบางอย่างที่ฉันพลาดไป? "id_rsa"ที่สำคัญจะอยู่ที่สถานที่ตั้งมาตรฐานในไดเรกทอรีบ้านของฉันที่มีชื่อ

ฉันใช้ Windows 7 x64

อัปเดต

เนื่องจาก NPM v3 มีการรองรับ GitLab และแหล่งอื่น ๆ ในตัว (BitBucket, Gist) ซึ่งคุณสามารถติดตั้งแพ็คเกจได้ น่าเสียดายที่มันใช้งานได้กับสาธารณะเท่านั้นจึงไม่เกี่ยวข้องกับสิ่งนี้ แต่บางคนอาจพบว่ามีประโยชน์

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

ตรวจสอบเอกสาร: https://docs.npmjs.com/cli/install


1
แล้ว gitlab url ที่ฉันใช้คืออะไร? ฉันเพิ่งเห็นว่า<placeholders>ฉันลองหลายรูปแบบแล้ว แต่ก็ยังบอกว่าไม่พบโครงการ
chovy

1
$ npm i -S git+ssh://git@gitlab.com/org/repo.gitไม่ทำงาน
chovy

คำตอบ:


164

คุณมีวิธีการต่อไปนี้ในการเชื่อมต่อกับที่เก็บ gitlab ส่วนตัว

กับ SSH

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คุณยังสามารถระบุสาขาหรือแท็กเช่น ฉันจะเปลี่ยนเครื่องหมายคำตอบเนื่องจากถูกต้องมากขึ้น
FredyC

1
@jamessidhu ฉันไม่แน่ใจ แต่มันถามรหัสผ่านฉันด้วย SSH เมื่อให้รหัสผ่านมันทำให้ฉันมีข้อผิดพลาด มีความคิดอย่างไรในการแก้ไข
codenooker

@codesnooker คุณตั้งค่าคีย์ SSH ใน Gitlab แล้วหรือยัง? หากคีย์ไม่ได้รับอนุญาตระหว่างเครื่องของคุณและรีโมตคีย์จะเป็นรหัสผ่านเริ่มต้นเช่นการเข้าถึงเซิร์ฟเวอร์
sidhuko

5
สิ่งนี้ใช้ได้กับฉันด้วยไวยากรณ์ URL จริงเท่านั้นเช่นgit+ssh://git@git.mydomain.com/Username/Repository(สังเกต / แยกโฮสต์และชื่อผู้ใช้) นี่อาจเป็นสิ่งที่เฉพาะเจาะจงของเส้นด้ายบางทีตัวอย่างที่แนะนำอาจใช้ได้กับ npm
Ivo van der Wijk

1
ปรับใช้โทเค็นใช้งานได้ดี <token-name>ในตัวอย่างดูเหมือนgitlab+deploy-token-17034ว่าไม่ใช่ชื่อที่คุณกำหนดให้กับโทเค็น
Mr5o1

28

แทนที่จะgit://ใช้git+ssh://และ npm ควรทำในสิ่งที่ถูกต้อง


6
คำตอบจาก npm ผู้สร้างเอง👆
Dima Parzhitsky

ฉันได้รับundefined ls-remote <url>
chovy

git + ssh: git@git.mydomain.com/Username/Repositor ลบ // มันใช้ได้กับฉัน Thx
AliasCocoa

26

อัปเดต

ในฐานะที่เป็น @felix กล่าวถึงในการแสดงความคิดเห็น (ขอบคุณ @felix) โดยใช้มากขึ้นที่เกี่ยวข้องสำหรับการอ่านรีจิสทรีส่วนตัวบนdeploy token gitlabวิธีนี้คือโทเค็นถูกบุกรุกผู้โจมตีสามารถอ่านที่เก็บนั้นและไม่สามารถทำการเปลี่ยนแปลงได้

การสร้าง Deploy Token

  1. เข้าสู่GitLabบัญชีของคุณ
  2. ไปที่โปรเจ็กต์ที่คุณต้องการสร้าง Deploy Tokens ให้
  3. ไปที่การตั้งค่า> ที่เก็บ
  4. คลิกที่Expandส่วน Deploy Tokens
  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ด้วยโทเค็นที่สร้างขึ้น คุณสามารถระบุbranchและtagในตอนท้ายของ URL #{branch|tag}โดย

หมายเหตุ:เนื่องจากโทเค็นการเข้าถึงอยู่ในpackage.jsonทุกคนที่มีสิทธิ์เข้าถึงโปรเจ็กต์นี้จึงสามารถอ่านที่เก็บได้ดังนั้นฉันจึงถือว่าโปรเจ็กต์ของคุณเป็นแบบส่วนตัว


5
อีกวิธีหนึ่งคือการสร้าง Deploy Token สำหรับที่เก็บเฉพาะนั้น จากนั้นจะไม่ให้สิทธิ์การเข้าถึงแบบอ่านสำหรับ repos ทั้งหมดของคุณ "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: ติดตั้งgit ดู
Xaqron

2
ฉันต้องการชี้ให้เห็นว่าหากโครงการของคุณอยู่ในกลุ่มคุณควรกำหนดสิ่งนี้: "private-module": "git+https://gitlab+deploy-token-username:deploy-token@gitlab.com/group_name/project"ดังนั้น your usernameคุณต้องกำหนดgroup_nameก่อนชื่อโครงการ
sfarzoso

8

แม้ว่าคำถามจะเกี่ยวกับ Gitlab แต่คำถามนี้ก็อยู่ในอันดับที่ดีในการค้นหาของ Google ดังนั้นนี่คือข้อมูลเพิ่มเติมเกี่ยวกับวิธีแก้ไขปัญหาที่คล้ายกันที่ฉันได้รับจาก Github

สำหรับฉันการเปลี่ยน URL เท่านั้นไม่ได้ทำให้มันใช้งานได้ นี่คือขั้นตอนที่ฉันต้องดำเนินการเพื่อแก้ไขปัญหานี้:

  • git+ssh://git@github.com:owner/repo.git#master
  • สร้างคีย์การปรับใช้และเพิ่มลงใน repo
  • แก้ไขการกำหนดค่า git ( ~/.ssh/configสร้างไฟล์หากไม่มีอยู่) เพื่อบังคับให้ใช้ DeployKey แทนคีย์ ssh เริ่มต้น

หลังจากนั้นการติดตั้ง npm ก็ใช้งานได้ ตัวเลือกและโซลูชันอื่น ๆ ทั้งหมดเป็นผลมาจากการทำลายการติดตั้ง npm


ที่ต้องพิมพ์ผิด :ownerเหรอ?
chovy

1
ฉันจะทำอย่างไรกับ~/.ssh/config? ฉันยังไม่ผ่าน npm / gitlab
chovy

6

เพียงแค่สำหรับคนอื่นที่สะดุดข้ามนี้ผมไม่สามารถรับมันทำงานผ่าน HTTPS ที่ทั้งหมด - ดูเหมือนว่ามันไม่สนับสนุนการเชื่อมโยงโดยตรงกับ repo (เช่น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


6

ไม่มีคำตอบอื่นใดที่เหมาะกับฉันสำหรับ repo gitlab.com ส่วนตัว ...

วิธีนี้ใช้ได้ผล:

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

มันเป็นเพียง url โคลน git ssh จากช่องป้อนข้อมูล "โคลน" ของหน้าโปรเจ็กต์ที่git+ssh://เพิ่มไว้ที่ด้านหน้าของมัน


1
ใช้งานได้เนื่องจากคีย์สาธารณะ ssh ของคุณได้รับการตั้งค่าในบัญชี gitlab แล้ว
lasec0203

3

เท่าที่ฉันสามารถบอกได้ว่าคุณกำลังทำอะไรผิดอยู่ที่git://โปรโตคอล GitLab รองรับเฉพาะ HTTP และ SSH สำหรับโคลน ดังนั้นคุณต้องใช้หนึ่งในวิธีการเหล่านั้นแทนโปรโตคอล git


3

สำหรับฉันตั้ง package.json ตามด้านล่างใช้งานได้

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

โทเค็นได้รับจาก "การตั้งค่าโปรไฟล์ - โทเค็นการเข้าถึง" ของคุณ


สิ่งนี้ได้ผลสำหรับฉันเช่นกัน ฉันทำงานหลังพร็อกซีที่มีใบรับรองที่ลงนามด้วยตนเอง
Stefano Mozart

สิ่งนี้ใช้งานได้จริงสำหรับฉัน แต่ฉันสงสัยว่าควรทิ้งโทเค็นไว้ใน package.json เป็นความคิดที่ดีหรือไม่เนื่องจากคนอื่นอาจใช้เพื่อเขียน gitlab (อย่างน้อยก็ในกรณีของฉัน) ไม่อนุญาตให้ฉันสร้างโทเค็นการเข้าถึงแบบอ่านอย่างเดียว แต่เป็นโทเค็นการเข้าถึงแบบเต็มเท่านั้น คุณคิดอย่างไร?
Cancerbero

หมายเหตุ: GitLab 10.7 (เปิดตัวเมษายน 2018) เพิ่ม "Deploy Tokens" ระดับโปรเจ็กต์ ควรใช้สิ่งเหล่านี้แทน "โทเค็นการเข้าถึง" ระดับผู้ใช้ ลิงค์เอกสาร

1

ตอนนี้ Gitlab มีรีจิสตรีแพ็กเกจที่สามารถสร้างปรับใช้และโฮสต์แพ็คเกจ npm ได้ ด้วยที่เก็บส่วนตัวคุณสามารถให้การควบคุมการเข้าถึงแบบละเอียดสำหรับเนื้อหาที่เก็บและแพ็กเกจ

แพคเกจ NPM สามารถติดตั้งได้จากที่เก็บ Gitlab ส่วนตัวโดยการเพิ่มไฟล์ข้าง.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 คือชื่อโมดูล project-id (ตัวเลข 8 หลัก) คือรหัสโปรเจ็กต์ Gitlab ซึ่งสามารถมองเห็นได้จากหน้าโปรเจ็กต์ภายใต้ชื่อ เป็นไปได้ที่จะละ @foo จากชื่อโมดูล (แต่ไม่ใช่ลิงก์)

การใช้หลายโมดูลที่มีขอบเขตเดียวกันและโทเค็นการปรับใช้ที่แตกต่างกันทำให้การจัดการที่เก็บส่วนตัวมีความปลอดภัย นอกจากนี้โทเค็นการปรับใช้อาจมีเพียงการเข้าถึงpackage registryซึ่งหมายความว่าผู้ใช้ปลายทางจะไม่สามารถเข้าถึงซอร์สโค้ดทั้งหมดจากที่เก็บได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.