ใช้โทเค็น gitlab เพื่อโคลนโดยไม่ต้องตรวจสอบสิทธิ์


140

ฉันต้องการโคลนที่เก็บ gitlab โดยไม่ต้องแจ้งสำหรับสคริปต์อัตโนมัติของฉันโดยใช้โทเค็นส่วนตัวจากบัญชี gitlab ของฉัน

ใครสามารถให้ตัวอย่างได้หรือไม่?

ฉันรู้ว่าฉันสามารถทำได้ด้วยผู้ใช้และรหัสผ่าน:

git clone https://" + user + ":" + password + "@" + gitlaburl;

และฉันรู้ว่ามันเป็นไปได้ด้วยคีย์ ssh

แต่ทั้งสองตัวเลือกไม่เพียงพอ


21
git clone https://<token-name>:<token>@gitlaburl
Kinght 金

1
@Kinght 金คำสั่งของคุณเท่านั้นที่ทำงานได้ !!. ขอบคุณมาก :-)
Hussain K

คำตอบ:


195

ฉันรู้ว่ามันเก่า แต่นี่คือวิธีที่คุณทำ:

git clone https://oauth2:ACCESS_TOKEN@somegitlab.com/vendor/package.git


3
สิ่งนี้ใช้ได้ผลกับฉันใน GitLab 8.5.7 Enterprise Edition
Ben Patterson

1
ใช้งานได้ที่นี่ (GitLab Community Edition 8.16.5 064dab1)
Martin M.

5
มันได้ผล! ฉันสงสัยว่าทำไมใน gitlab.com เกี่ยวกับรายละเอียดโครงการพวกเขาไม่ให้ไวยากรณ์คำสั่งที่สมบูรณ์: - ((
FRa

ใช้ได้กับ Gitlab 10.4.4 แต่คุณต้องสร้างapiโทเค็น A read_userสามารถอ่านได้เฉพาะ repos ภายใต้/users
Kurt

2
จะใช้มากกว่านี้ได้sshอย่างไร?
hemu

41

คุณสามารถทำได้ดังนี้:

git clone https://gitlab-ci-token:<private token>@git.example.com/myuser/myrepo.git

2
ดูเหมือนจะถูกต้อง แต่มันมักจะล้มเหลวในการตรวจสอบสิทธิ์สำหรับฉัน :(
Randyaa

เหมือนกันกับฉัน: fatal: การตรวจสอบความถูกต้องล้มเหลวสำหรับ
vogash

4
<โทเค็นส่วนตัว> จะต้องถูกแทนที่ด้วยโทเค็นของนักวิ่ง CI ไม่ใช่โทเค็นส่วนตัวของบัญชี
Kip

2
ฉันคิดว่าคุณควรจะสามารถใช้โทเค็นส่วนตัวของคุณได้เช่นกัน @tim
Gobi Dasu

คุณสามารถใช้โทเค็น ci เฉพาะโปรเจ็กต์ (เปิดใช้งานบิลด์จากนั้นไปที่การกำหนดค่าโปรเจ็กต์ / รันเนอร์)
BM5k

41

gitlab มีโทเค็นมากมาย:

  • โทเค็นส่วนตัว
  • โทเค็นการเข้าถึงส่วนบุคคล
  • CI / CD ทำงานโทเค็น

ฉันทดสอบเฉพาะโทเค็นการเข้าถึงส่วนบุคคลโดยใช้GitLab Community Edition 10.1.2ตัวอย่าง:

git clone https://gitlab-ci-token:${Personal Access Tokens}@gitlab.com/username/myrepo.git


git clone https://oauth2:${Personal Access Tokens}@gitlab.com/username/myrepo.git

หรือใช้ชื่อผู้ใช้และรหัสผ่าน:

git clone https://${username}:${password}@gitlab.com/username/myrepo.git

หรือโดยใส่รหัสผ่านของคุณ:

git clone https://${username}@gitlab.com/username/myrepo.git

แต่ดูเหมือนว่าโทเค็นส่วนตัวจะไม่สามารถทำงานได้


5
โปรดทราบว่าโทเค็นส่วนตัวถูกลบออกเนื่องจากโทเค็นการเข้าถึงส่วนบุคคลใน GitLab 10.2: about.gitlab.com/2017/09/22/gitlab-10-0-released/…
David Planella

26

ใช้โทเค็นแทนรหัสผ่าน (โทเค็นต้องมีขอบเขต "api" เพื่อให้สามารถโคลนได้):

git clone https://username:token@gitlab.com/user/repo.git

ทดสอบกับ 11.0.0-ee


ใช่มันได้ผลสำหรับฉัน โทเค็นสามารถใช้เป็นรหัสผ่านได้
cwtuan

1
สำหรับคนที่ใช้ Google สิ่งนี้: นี่คือสิ่งที่คุณต้องการหากใช้ Personal Access Token ผ่าน HTTPS บน gitlab.com
Adam Baxter

14

คุณสามารถใช้โทเค็นตัววิ่งสำหรับ CI / CD Pipelines ของที่เก็บ GitLab ของคุณ

git clone https://gitlab-ci-token:<runners token>@git.example.com/myuser/myrepo.git

<runners token>หาได้จากที่ไหน:

git.example.com/myuser/myrepo/pipelines/settings

หรือคลิกที่Settings icon -> CI/CD Pipelineและมองหา Runners Token บนหน้า

ภาพหน้าจอของตำแหน่งโทเค็นนักวิ่ง: ภาพหน้าจอของตำแหน่งโทเค็นนักวิ่ง


5
หมายเหตุ: ตอนนี้โทเค็นนักวิ่งได้เลิกใช้งานแล้ว
Arihant Godha

@ArihantGodha ที่มา?
miq

2
@miq ดูที่นี่ (ณ > = 8.12)
Yan Foto

1
รูปแบบนี้เลิกใช้แล้วโปรดดูที่stackoverflow.com/questions/25409700/…
Muhan Alim

ไม่ทำงานจากภายในไปป์ไลน์ GitLab CI แต่สายนี้ใช้ได้ผล:git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/...
Slawa

12

หากคุณมีที่เก็บอยู่แล้วและเพิ่งเปลี่ยนวิธีการพิสูจน์ตัวตนเป็น MFA คุณสามารถเปลี่ยนremote originHTTP URI ของคุณเพื่อใช้โทเค็น api ใหม่ของคุณได้ดังนี้:

git remote set-url origin https://oauth2:TOKEN@ANY_GIT_PROVIDER_DOMAIN/YOUR_PROJECT/YOUR_REPO.git

และคุณไม่จำเป็นต้องโคลนที่เก็บอีกครั้งเลย


3
git clone https://oauth2:TOKEN@ANY_GIT_PROVIDER_DOMAIN/YOUR_PROJECT/YOUR_REPO.gitยังทำงานให้ฉันขอบคุณ !! ฉันจะตอบกระทู้นี้พร้อมวิธีแก้ปัญหาที่ถูกต้อง
Rutrus

10

วิธีหนึ่งที่เป็นไปได้คือการใช้โทเค็นการปรับใช้ ( https://docs.gitlab.com/ee/user/project/deploy_tokens ) หลังจากสร้างโทเค็นแล้วให้ใช้:

git clone https://<username>:<deploy_token>@gitlab.example.com/tanuki/awesome_project.git 

ตามที่ระบุไว้ในลิงค์ด้านบน


ดูเหมือนว่าสิ่งนี้จะไม่ทำงานกับการติดตั้ง npm บนคอนเทนเนอร์นักเทียบท่าใหม่ค่าเริ่มต้นคือ ssh
Vix

ไม่ทำงานจริงๆ
rios0rios0

10

เนื่องจากการ8.12โคลนโดยใช้HTTPSโทเค็น + รันเนอร์ไม่รองรับอีกต่อไปดังที่กล่าวไว้ที่นี่ :

ใน 8.12 เราได้ปรับปรุงสิทธิ์การสร้าง ความสามารถในการโคลนโปรเจ็กต์โดยใช้โทเค็นนักวิ่งนั้นไม่ได้รับการสนับสนุนนับจากนี้ (มันใช้งานได้จริงโดยบังเอิญและไม่เคยเป็นคุณสมบัติที่สมบูรณ์แบบดังนั้นเราจึงเปลี่ยนสิ่งนั้นใน 8.12) คุณควรใช้ build token แทน

นี้เป็นเอกสารที่ใช้กันอย่างแพร่หลายที่นี่ - https://docs.gitlab.com/ce/user/project/new_ci_build_permissions_model.html


1
ไม่สามารถใช้โทเค็นนักวิ่งได้ แต่ใช้โทเค็นการเข้าถึงส่วนบุคคล โปรดดูคำตอบของฉัน: stackoverflow.com/questions/25409700/…
Muhan Alim

@MuhanAlim ฉันไม่แนะนำให้ใครเปิดเผยบัญชีทั้งหมดของพวกเขาโดยใช้โทเค็นการเข้าถึง นั่นเป็นเหตุผลที่พวกเขาเรียกว่าPrivate Access Token !
Yan Foto

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

1
สคริปต์อัตโนมัติหมายความว่าขั้นตอนทั้งหมดไม่ได้ทำงานในเครื่อง อาจเป็นที่ที่คนอื่นสามารถเข้าถึงได้
Yan Foto

8

ภายในไปป์ไลน์ GitLab CI CI_JOB_TOKENตัวแปรสภาพแวดล้อมใช้ได้กับฉัน:

git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/...

ที่มา: Gitlab Docs

BTW การตั้งค่าตัวแปรนี้.gitlab-ci.ymlช่วยในการแก้ไขข้อผิดพลาด

variables:
    CI_DEBUG_TRACE: "true"

2

ฉันใช้ SSH โดยใช้การตั้งค่าคีย์การปรับใช้ตามโครงการ (อ่านอย่างเดียว)


ฉันก็เช่นกันเพราะฉันใช้ GIT_STRATEGY: ไม่มี
Aalex Gabi

1

เพื่อให้อนาคตของฉันมีความสุข: RTFM - อย่าใช้ gitlab-ci-token เลย แต่เป็น.netrcไฟล์

มีประเด็นสำคัญสองสามประการ:

  1. echo -e "machine gitlab.com\nlogin gitlab-ci-token\npassword ${CI_JOB_TOKEN}" > ~/.netrc
  2. อย่าลืมแทนที่ "gitlab.com" ด้วย URL ของคุณ!
  3. อย่าพยายามทำตัวให้ฉลาดและสร้างไฟล์. netrc โดยตรง gitlab จะไม่แทนที่$CI_JOB_TOKENไฟล์ภายใน!
  4. การใช้งานhttps://gitlab.com/whatever/foobar.com- ไม่ssh://git@foobarไม่ไม่git+ssh:// git+https://คุณไม่จำเป็นต้องมีเนื้อหา CI-TOKEN ใน URL
  5. ตรวจสอบให้แน่ใจว่าคุณทำได้ git clone [url from step 4]

ความเป็นมา: ฉันเข้าใจแล้ว

fatal: could not read Username for 'https://gitlab.mycompany.com': No such device or address

เมื่อฉันพยายามทำให้ Ansible + Gitlab + Docker ทำงานได้ตามที่ฉันจินตนาการไว้ ตอนนี้ใช้งานได้แล้ว



1

หลายคำตอบข้างต้นใกล้เคียง แต่ได้รับ ~ usernameไวยากรณ์สำหรับdeployโทเค็นไม่ถูกต้อง มีโทเค็นประเภทอื่น ๆ แต่deploy token gitlab เสนอ (อย่างน้อยประมาณปี 2020 ขึ้นไป) ต่อ repoเพื่ออนุญาตการเข้าถึงแบบกำหนดเองรวมถึงอ่านอย่างเดียว

จากrepository(หรือgroup) พบว่าsettings-> ->repository deploy tokensสร้างใหม่ A usernameและtokenฟิลด์ถูกสร้างขึ้น usernameไม่ได้เป็นค่าคงที่โดยค่าเริ่มต้น เป็นเอกลักษณ์ของโทเค็นนี้

git clone https://<your_deploy_token_username>:<the_token>@gitlab.com/your/repo/path.git

ทดสอบบน gitlab.com สาธารณะบัญชีฟรี

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