รับรองความถูกต้อง Jenkins CI สำหรับที่เก็บส่วนตัว Github


137

ฉันต้องการให้ Jenkins ดึงข้อมูลโดยอัตโนมัติจากที่เก็บส่วนตัวของฉันที่โฮสต์บน Github แต่ฉันไม่รู้ว่าจะทำงานนั้นให้สำเร็จได้อย่างไร .. พยายามเอกสารสร้าง ssh-key สำหรับผู้ใช้ jenkins และสิ่งที่ฉันเห็นคือ: "ไม่สามารถโคลน repo ได้" ฉันได้ตรวจสอบ URL แล้ว - ถูกต้อง

เบาะแสใด ๆ คุณอาจจะรู้จักเอกสาร / บล็อก / อะไรก็ตามที่อธิบายถึงสิ่งประเภทนี้


ฉันตอบคำถามที่คล้ายกันนี้คุณสามารถดูคำตอบได้ในลิงค์ด้านล่าง: jenkins & GitHub
user965062

คำตอบ:


139

บางทีการสนับสนุน GitHub สำหรับการปรับใช้คีย์คือสิ่งที่คุณกำลังมองหา? ในการอ้างอิงหน้านั้น:

ฉันควรใช้คีย์การปรับใช้เมื่อใด

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

หากนั่นคือสิ่งที่คุณพยายามแล้ว แต่ไม่ได้ผลคุณอาจต้องการอัปเดตคำถามของคุณด้วยรายละเอียดเพิ่มเติมเกี่ยวกับ URL ที่ใช้ชื่อและตำแหน่งของไฟล์สำคัญ ฯลฯ


ตอนนี้สำหรับส่วนทางเทคนิค: จะใช้คีย์ SSH กับ Jenkins ได้อย่างไร?

หากคุณมีการพูดการใช้ยูนิกซ์คุณสามารถเก็บกุญแจสำคัญในการปรับใช้ในjenkins ~/.ssh/id_rsaเมื่อ Jenkins พยายามโคลน repo ผ่าน ssh ก็จะพยายามใช้คีย์นั้น

ในการตั้งค่าบางอย่างคุณไม่สามารถเรียกใช้ Jenkins เป็นบัญชีผู้ใช้ของตัวเองและอาจไม่สามารถใช้ตำแหน่งคีย์ ssh เริ่มต้น~/.ssh/id_rsaได้ ในกรณีเช่นนี้คุณสามารถสร้างคีย์ในตำแหน่งที่ตั้งอื่นเช่น~/.ssh/deploy_keyและกำหนดค่าsshเพื่อใช้กับรายการใน~/.ssh/config:

Host github-deploy-myproject
    HostName       github.com
    User           git
    IdentityFile   ~/.ssh/deploy_key
    IdentitiesOnly yes

เพราะสิ่งที่คุณรับรองความถูกต้องทั้งหมดที่เก็บ Github ใช้git@github.comและคุณไม่ต้องการที่สำคัญดังกล่าวข้างต้นที่จะใช้สำหรับการเชื่อมต่อทั้งหมดของคุณไป Github เราได้สร้างโฮสต์นามแฝงGitHub ปรับใช้-MyProject URL โคลนของคุณกลายเป็น

git clone github-deploy-myproject:myuser/myproject

และนั่นคือสิ่งที่คุณใส่เป็นURL ที่เก็บไว้ใน Jenkins

(โปรดทราบว่าคุณต้องไม่ใส่ssh: //ข้างหน้าเพื่อให้สิ่งนี้ทำงานได้)


4
Bur คุณสร้างกุญแจสำหรับเจนกินส์ได้อย่างไร?
Thiago Diniz

5
"คีย์การปรับใช้" เป็นเพียงคีย์ SSH เก่า ๆ สิ่งที่ฉันทำคือเรียกใช้ssh-keygenเมื่อผู้ใช้เจนกินส์ทำงานเป็น ("เจนกินส์" บนเซิร์ฟเวอร์ Ubuntu ของฉัน) จากนั้นฉันก็เพิ่มลง~jenkins/.ssh/id_rsa.pubในส่วนปรับใช้คีย์ของที่เก็บบน github
Adam Monsen

10
ในการติดตั้งบางอย่างคุณจะต้องออกสิ่งนี้ไม่ใช่ใน~ไดเรกทอรี แต่/var/lib/jenkins/.ssh/สำหรับผู้ใช้เจนกินส์เริ่มต้นที่จะใช้คีย์เหล่านั้น!
garmoncheg

7
หากต้องการติดตามความคิดเห็นโดย @garmoncheg โปรดทราบว่า/var/lib/jenkins เป็นโฮมไดเร็กทอรี ( ~) สำหรับjenkinsผู้ใช้
David Harkness

1
ไม่มีใครรู้วิธีปรับใช้ hooks ที่ทำงานกับสิ่งนี้? ฉันพบข้อผิดพลาดคล้ายกับCould not match github-deploy-myproject:myuser/myprojectในบันทึกการเชื่อมต่อ ฉันได้ป้อนสิ่งนั้นเป็น URL Repo ของฉันและบิวด์ทำงานเพื่อให้สามารถเข้าถึง GitHub ได้ เป็นเพียงโพสต์จาก GitHub ที่ไม่สามารถทริกเกอร์บิวด์ได้
pogo

36

สิ่งหนึ่งที่ได้ทำงานนี้สำหรับฉันคือการทำให้แน่ใจว่าอยู่ในgithub.com~jenkins/.ssh/known_hosts


สิ่งนี้แก้ไขปัญหาที่ฉันพบหลังจากตั้งค่าคู่คีย์แล้วการกดคอมไพล์ล้มเหลว
chrisbunney

ในกรณีของฉันวิธีที่ง่ายที่สุดในการทำเช่นนี้คือการทำ 'sudo su jenkins' เนื่องจากเป็นไปไม่ได้ที่จะเข้าสู่ระบบในฐานะผู้ใช้เจนกินส์อย่างถูกต้อง เมื่อคุณมีข้อมูลประจำตัวของเจนกินส์แล้วคุณสามารถล็อกอิน ssh ด้วยตนเองไปที่ github / bitbucket และยอมรับคีย์โฮสต์ระยะไกลในนามของผู้ใช้เจนกินส์
LOAS

แต่จะเกิดอะไรขึ้นถ้าคุณทำให้ Jenkins Initialization เป็นส่วนหนึ่งของสภาพแวดล้อมการพัฒนา 'bootstrap' ลักษณะ 'คู่มือ' นี้ใช้ไม่ได้
TheJediCowboy

13

หากคุณต้องการให้ Jenkins เข้าถึงมากกว่า 1 โปรเจ็กต์คุณจะต้อง:
1. เพิ่มคีย์สาธารณะให้กับบัญชีผู้ใช้ github หนึ่งบัญชี
2. เพิ่มผู้ใช้รายนี้เป็นเจ้าของ (เพื่อเข้าถึงโปรเจ็กต์ทั้งหมด) หรือเป็นผู้ทำงานร่วมกันในทุกโปรเจ็กต์

คีย์สาธารณะจำนวนมากสำหรับผู้ใช้ระบบเดียวจะไม่ทำงานเนื่องจาก GitHub จะพบคีย์การปรับใช้ที่ตรงกันก่อนและจะส่งข้อผิดพลาดกลับมาเช่น"ข้อผิดพลาด: การอนุญาตให้ผู้ใช้ / repo2 ถูกปฏิเสธไปยังผู้ใช้ / repo1"

http://help.github.com/ssh-issues/


2
คำตอบเกี่ยวกับการใช้คีย์การปรับใช้จะทำงานได้ดีหากคุณมีที่เก็บเดียว แต่เมื่อคุณต้องการให้เซิร์ฟเวอร์ CI สร้างโปรเจ็กต์ในหลาย repos คุณก็จะสามารถจัดการคีย์หลายชุดได้ทันที (หนึ่งคู่ต่อ repo) และการใช้แนวทางที่ระบุไว้ในคำตอบนี้จะง่ายกว่ามาก
ซีคลาร์ก

คู่มือสำหรับผู้ชายคนนี้อธิบายวิธีตั้งค่าผ่านปุ่มปรับใช้ต่างๆโดยใช้ ~ / .ssh / config: gist.github.com/victorborda/2871029
Jorge Orpinel

@JorgeOrpinel ฉันเชื่อว่าวิธีการในลิงก์สามารถป้องกันไม่ให้เว็บฮุคของ github ทริกเกอร์บิลด์โดยใช้ปลั๊กอิน Github ฉันพบว่าผู้ใช้ดัมมี่ที่มีคีย์เดียวและการเข้าถึงที่เก็บทั้งหมดทำงานได้ดีขึ้นเมื่อฉันต้องการให้บิวด์ถูกทริกเกอร์โดย webhook ด้วยเพราะฉันต้องการ URL ที่เก็บในการกำหนดค่าบิลด์เพื่อให้ตรงกับ URL โคลนของ github โปรดดูของฉันอื่น ๆความคิดเห็น
chrisbunney

7

เจนกินส์สร้างผู้ใช้เจนกินส์ในระบบ ต้องสร้างคีย์ ssh สำหรับผู้ใช้ Jenkins ขั้นตอนมีดังนี้

sudo su jenkins -s /bin/bash
cd ~
mkdir .ssh // may already exist
cd .ssh
ssh-keygen

ตอนนี้คุณสามารถสร้างข้อมูลประจำตัวของ Jenkins โดยใช้คีย์ SSH บนแดชบอร์ด Jenkins Add Credentials

เลือกตัวเลือกนี้

คีย์ส่วนตัว: จากปรมาจารย์เจนกินส์ ~ / .ssh


1

ฉันมีปัญหาคล้ายกันกับ gitlab ปรากฎว่าฉันได้ จำกัด ผู้ใช้ที่ได้รับอนุญาตให้เข้าสู่ระบบผ่าน ssh สิ่งนี้จะไม่ส่งผลกระทบต่อผู้ใช้ github แต่ในกรณีที่ผู้ใช้พบปัญหา gitlab (และอื่น ๆ ที่คล้ายกัน) ให้แน่ใจว่าคุณได้เพิ่มgitการAllowUsersตั้งค่าใน/etc/ssh/sshd_config:

# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
AllowUsers batman git

1

อีกทางเลือกหนึ่งคือการใช้โทเค็นการเข้าถึงส่วนบุคคลของ GitHub :

  • ไปที่https://github.com/settings/tokens/new
  • เพิ่มขอบเขตrepo
  • ใน Jenkins เพิ่มแหล่งที่มาของGitHub
  • ใช้ Repository HTTPS URL
  • เพิ่มHTTPS URL ของ git repo (ไม่ใช่SSH one เช่นhttps://github.com/my-username/my-project.git)
  • เพิ่มข้อมูลรับรอง
    • ชนิด: ชื่อผู้ใช้พร้อมรหัสผ่าน
    • ชื่อผู้ใช้: ชื่อผู้ใช้ GitHub
    • รหัสผ่าน: โทเค็นการเข้าถึงส่วนบุคคลที่คุณสร้างบน GitHub
    • ID: บางอย่างเช่น github-token-for-my-username

ฉันทดสอบสิ่งนี้กับ Jenkins ver. 2.222.1 และปลั๊กอิน Jenkins GitHub 1.29.5 พร้อม repo GitHub ส่วนตัว


-1

อีกทางเลือกหนึ่งสำหรับคำตอบจาก sergey_mo คือการสร้างคีย์ ssh หลายปุ่มบนเซิร์ฟเวอร์ jenkins

(แม้ว่าในฐานะผู้แสดงความคิดเห็นคนแรกในคำตอบของ sergey_mo กล่าวว่าสิ่งนี้อาจเจ็บปวดกว่าการจัดการคีย์คู่เดียว)


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