เจนกินส์ล้มเหลวในการเชื่อมต่อกับที่เก็บ git


11

ฉันไม่สามารถกำหนดค่าที่เก็บข้อมูล git ในแบบที่เจนกินส์สามารถเข้าถึงได้

ใต้ "โครงการ> กำหนดค่า> การจัดการรหัสต้นทาง" ฉันตั้งค่า Repository URL เป็น "git @ store: repositories / testproject.git"

ฉันได้รับข้อผิดพลาดนี้:

Failed to connect to repository : Command "/usr/bin/git -c core.askpass=true ls-remote -h git@store:repositories/testproject.git HEAD" returned status code 128:
stdout: 
stderr: Permission denied, please try again. 
Permission denied, please try again. 
Permission denied (publickey,password). 
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

การเข้าถึงด้วย URL นั้นทำงานบนเชลล์:

jenkins@dilbert:~$ /usr/bin/git -c core.askpass=true ls-remote -h git@store:repositories/testproject.git
git@store's password: 
4fd35a4f528e2f2921a52cfd03918b7cbde3d253    refs/heads/master

ฉันถูกขอรหัสผ่านและใช้งานได้

ฉันเชื่อมโยงรหัสผ่านเดียวกันกับข้อมูลรับรองใน Jenkins กับ "git /" และฉันก็ลอง "git @ store /" ไม่มีใครทำงาน

โปรดทราบว่านี่ไม่เกี่ยวกับ GitHub แต่เกี่ยวกับที่เก็บ Git ท้องถิ่น

อัปเดต:

การเพิ่มรหัสผับจากต้นแบบของเจนกินส์ไปยังบิลด์บิลด์ช่วยให้การกำหนดค่าทำงานได้:

ssh-copy-id jenkins@dilbert

ตอนนี้งานสร้างล้มเหลว:

 > /usr/bin/git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > /usr/bin/git config remote.origin.url git@store:repositories/testproject.git # timeout=10
Fetching upstream changes from git@store:repositories/testproject.git
 > /usr/bin/git --version # timeout=10
 > /usr/bin/git -c core.askpass=true fetch --tags --progress git@store:repositories/testproject.git +refs/heads/*:refs/remotes/origin/*
ERROR: Error fetching remote repo 'origin'
hudson.plugins.git.GitException: Failed to fetch from git@store:repositories/testproject.git
    at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:735)
    at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:983)
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1016)
    at hudson.scm.SCM.checkout(SCM.java:484)
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1270)
    at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:609)
    at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:531)
    at hudson.model.Run.execute(Run.java:1751)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:89)
    at hudson.model.Executor.run(Executor.java:240)
Caused by: hudson.plugins.git.GitException: Command "/usr/bin/git -c core.askpass=true fetch --tags --progress git@store:repositories/testproject.git +refs/heads/*:refs/remotes/origin/*" returned status code 128:
stdout: 
stderr: Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

เก็บเป็นหลักของเจนกินส์, dilbert เป็นทาสสร้าง ssh จากอาจารย์ถึงทาสทำงาน

jenkins@store:~$ ssh dilbert uptime
 16:06:21 up 3 days, 18:53, 13 users,  load average: 0,31, 0,38, 0,50

ความคิดใด ๆ วิธีการแก้ปัญหานี้?

คำตอบ:


5

การรับรองความถูกต้องทำงานผ่าน ssh คุณได้เพิ่ม ssh-key สาธารณะของผู้ใช้ jenkins ให้กับ git-user บน git-server ของคุณหรือไม่?

แจ้งให้เราทราบหากคุณต้องการคำแนะนำในการตั้งค่าการตรวจสอบความถูกต้อง ssh และฉันจะแก้ไขโพสต์นี้ที่นี่

/ แก้ไข:

ดีใจที่คุณได้มันทำงาน ฉันดูเว็บไซต์อย่างเป็นทางการของ jenkins เพื่อดูรายละเอียดคู่มือในส่วน ssh ของการกำหนดค่า แต่ฉันไม่สามารถหาได้

ดังนั้นนี่คือภาพรวมอย่างรวดเร็ว - แจ้งให้เราทราบหากนี่คือสิ่งที่คุณต้องการ

  1. ทาสเจนกินส์ (เครื่องสร้างอาคาร) เชื่อมต่อกับเซิร์ฟเวอร์คอมไพล์ (เจนกินส์มาสเตอร์)
  2. อาคารเครื่องจักรทำงานเป็นผู้ใช้เจนกินส์ (เช่นเจนกินส์ @ dilbert: ~ $)
  3. git-server ทำงานในฐานะผู้ใช้ git (เช่น git @ store: ~ $)
  4. ต้องวางกุญแจสาธารณะ jenkins @ dilbert ใน git @ store authorized_keys
  5. เรียกใช้jenkins@dilbert:~/.ssh$ ssh-copy-id git@storeเพื่อคัดลอกกุญแจสาธารณะ jenkins @ dilbert ssh ไปยังเซิร์ฟเวอร์ git

คุณช่วยอธิบายได้ว่าผู้ใช้คนใด ssh-key เพิ่มไปยังที่ไหน?
Jörg Beyer

ผู้ใช้ jenkins ควรมี pub-key ของเขาเก็บไว้ใน <jenkins user home dir> /. ssh / id_rsa.pub อันนี้ต้องถูกเพิ่มใน <git user home dir> /. ssh / authorized_keys
kindaleek

ทำ "jenkins @ store: ~ / .ssh $ ssh-copy-id git @ store" get's เจนกินส์เพื่อยอมรับการกำหนดค่า (นั่นคือการปรับปรุง) แต่การสร้างทาสเจนกินส์ระยะไกลล้มเหลว ความคิดใด ๆ
Jörg Beyer

ดีที่จะอ่าน น่าเสียดายที่ประสบการณ์ของฉันกับคอมไพล์ก็จบลงที่นั่น ... แต่ฉันจำปัญหาที่คล้ายกันในที่ทำงานได้ ฉันอาจเข้าใจผิดตอนนี้ แต่คุณต้องทำงานเป็นผู้ใช้ (เช่น Joerg Beyer) บนแพลตฟอร์ม git ใช่ไหม? โปรดยืนยันการอนุญาตที่นั่น (คุณสามารถเปลี่ยนการอนุญาตผู้ใช้ในเว็บอินเตอร์เฟสสำหรับแต่ละกลุ่มที่พวกเขาอยู่) พยายามตั้งให้นักพัฒนาทำการทดสอบ / แก้ไข:คุณเขียนทาสเจนกินส์จากระยะไกล - ถ้ามันใช้คู่กุญแจที่แตกต่างกันคุณต้องเพิ่มกุญแจสาธารณะให้กับกุญแจของผู้มีอำนาจอีกครั้ง
kindaleek

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