2011-06-29 35 views
11

Tôi đang thiết lập Jenkins trên máy chủ Win 2008 và đang gặp sự cố khi định cấu hình Jenkins để kết nối với GitHub. Tôi nhận được lỗi sau:Quyền bị từ chối (publickey) khi thiết lập Jenkins

Command "git.exe fetch -t [email protected]:USER/REPO.git +refs/heads/*:refs/remotes/origin/*" returned status code 128: Permission denied (publickey). 
fatal: The remote end hung up unexpectedly 

ERROR: Could not fetch from any repository 
FATAL: Could not fetch from any repository 
hudson.plugins.git.GitException: Could not fetch from any repository 
    at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:950) 
    at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:908) 
    at hudson.FilePath.act(FilePath.java:758) 
    at hudson.FilePath.act(FilePath.java:740) 
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:908) 
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1184) 
    at hudson.model.AbstractBuild$AbstractRunner.checkout(AbstractBuild.java:537) 
    at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:425) 
    at hudson.model.Run.run(Run.java:1376) 
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46) 
    at hudson.model.ResourceController.execute(ResourceController.java:88) 
    at hudson.model.Executor.run(Executor.java:175) 

Những điều tôi đã kiểm tra

  • Dịch vụ Jenkins đang chạy dưới tên người dùng của tôi.
  • Tôi đã thay đổi khóa SSH để không còn mật khẩu nữa.
  • Tôi đã xác minh khóa SSH của mình hợp lệ bằng cách thực hiện lệnh tương tự như Jenkins sử dụng msysgit.
  • Xác minh tất cả các đường dẫn của tôi là chính xác.

Jenkins Configuration Settings

  • Jenkins 1,418
  • GitHub Plugin 0,5
  • Git Plugin 1.1.9

trình msysgit nhưng CMD Prompt Liệu Không Khi Tôi điều hướng đến hợp lệ repo và thực hiện lệnh từ dấu nhắc DOS, nó cũng không thành công.

Bạn có biết tôi có thể bị thiếu gì không?

Cảm ơn sự giúp đỡ của bạn.

+0

Đây có phải là repo riêng tư không? Nếu không, bạn có thể sao chép bằng cách sử dụng URL giao thức Git thay vào đó (git: //github.com/USER/REPO.git), tránh hoàn toàn cần có khóa SSH. – leedm777

+2

Bạn có chắc chắn đã xác định biến môi trường HOME? Nó không được định nghĩa mặc định trên Windows. – VonC

+0

VonC, Cảm ơn bạn! Bạn đóng đinh nó. Vui lòng đăng câu trả lời để tôi có thể đánh dấu câu trả lời là đã được chấp nhận. Tôi đánh giá cao sự giúp đỡ của bạn. –

Trả lời

13

Như tôi đã nhận xét, chỉ định biến môi trường HOME là khóa, khi sử dụng giao thức ssh.
Vì Windows không có HOME, bạn cần phải xác định rõ ràng, với bất kỳ thư mục nào bạn muốn.

Tuy nhiên, Vestnik nhận xét:

I've specified to override HOME on the windows slave node to point it to C:\jenkins .
I've put correct id_rsa under the C:\jenkins\.ssh but still have this issue.
My slave agent running as service under SYSTEM account.

Hai lời khuyên:

  • bạn cần hiển thị màn hình nô lệ 'set' để kiểm tra xem HOME có được xác định khi được sử dụng với tài khoản SYSTEM hay không.
    Nếu không, điều đó có nghĩa là bạn cần phải thêm biến đó vào "biến môi trường hệ thống", không phải là "biến môi trường người dùng".

display env from the job definition

  • Đừng quên có cả id_rsaid_rsa.pub trong thư mục %HOME%\.ssh: bạn cần cả hai phím ssh công cộng và tư nhân.(Như đã đề cập trong "git clone with ssh issue")

Nếu bạn có một xây dựng parametrized, bạn cũng can define HOME that way và kiểm tra nếu đầy tớ anh em nhặt giá trị phù hợp với HOME:

define custom variables

+1

Cảm ơn bạn đã trả lời chi tiết. Sự cố đã được giải quyết khi tôi đặt khóa công khai cho điều khiển từ xa $ {HOME} /. Ssh/ – VestniK

+0

@VestniK: tuyệt vời! Vui vì bạn đã làm cho nó hoạt động. – VonC

+0

Để làm việc với biến 'HOME' đúng, bạn cần đảm bảo rằng nó được chỉ định cả trong Windows và trên Jenkins. Kiểm tra trong Windows tại dấu nhắc lệnh: 'echo% HOME%' nếu đầu ra chỉ đơn giản là '% HOME%', bạn cần đặt biến HOME trong Windows tại 'Control Panel> System> Advanced System Settings> Environment Variables'. Trong trường hợp của ví dụ trên, giá trị của biến cần phải là 'C: \ jenkins'. Kiểm tra rằng nó được thiết lập bởi ** restarting ** dấu nhắc lệnh và chạy 'echo% HOME%'. Đầu ra bây giờ sẽ là 'C: \ jenkins' – MrOodles

4

Có hai plugins trong jenkins liên quan đến ssh có thể được sử dụng: Publish Over SSHJenkins SSH plugin.

Plugin đầu tiên cung cấp tính khả dụng để đặt khóa ssh toàn cầu và plugin thứ hai cung cấp tính khả dụng để đặt các khóa ssh khác nhau.

Tiếp theo, bạn cần cài đặt thêm hai plugin sẽ được sử dụng trong cấu hình dự án GitHub PluginJenkins Git Plugin.

Plugin GitHub sẽ được sử dụng để đặt dự án GitHub. Plugin Jenkins Git sẽ được sử dụng để đặt "URL của kho lưu trữ" và các thứ khác như chi nhánh, v.v.

Tất cả các plugin có sẵn từ tab có sẵn trong Trình quản lý plugin Jenkins.

sao chép từ my blog post, on the topic:

Jenkins configuration:
The Jenkins SSH plugin give the availability to set private key per host, the second plugin do the job for a global host.
If Jenkins SSH plugin is used, then in SSH remote hosts write the host, user, passphrase and the path to the private key.
If Publish Over SSH is used, then in SSH setting write the passphrase and paste the private key or write the path to it.
The project configuration is:
GitHub Project https://github.com/GitUser/iOS-project/
*Source Code Management
-> Git
-> -> Repositories
-> -> -> URL of repository: [email protected]:GitUser/iOS-project.git
-- It is up to you configure a branch or take the default one --
*Build Triggers
-> Poll SCM -- Seted --
-> Schedule: * * * * *
*Build
-> Executed Shell

-> -> Command: xcodebuild -target iOS-project -configuration AdHoc -sdk iphoneos5.0 clean 
-> -> Command: agvtool new-version -all $BUILD_NUMBER 
-> -> Command: xcodebuild -target iOS-project -configuration AdHoc -sdk iphoneos5.0 
-> -> Command: xcrun -sdk iphoneos5.0 PackageApplication -v $WORKSPACE/build/AdHoc-iphoneos/iOS-project.app -o $WORKSPACE/build/AdHoc-iphoneos/iOS-project-$BUILD_NUMBER.ipa PROVISIONING_PROFILE="<provisioning profile>" 
-> -> Command: curl http://testflightapp.com/api/builds.json -F [email protected]$WORKSPACE/build/AdHoc-iphoneos/iCushion-1.0-$BUILD_NUMBER.ipa -F api_token=<api_token> -F team_token=<team_token> -F notes="This is an autodeploy build from Jenkins!" -F notify=True -F distribution_lists="<distributedlist 1>, <distributedlist 2>" 
0

Có vẻ plugin git hiện nay cung cấp một cách để chỉ Jenkins đến thư mục home.

  1. Nhấp vào nút thêm thông tin xác thực.

enter image description here

  1. Point Jenkins để khóa riêng của bạn.

enter image description here

  1. Chọn các thông tin mới được gia tăng từ danh sách.

enter image description here

0

Trong môi trường của tôi (Jenkins 64-bit với Java 32-bit, chạy trong một Windows Server 2016 64-bit), các giải pháp được đưa chìa khóa trong C: \ Windows \ SysWOW64 \ config \ systemprofile \ .ssh thư mục. Theo số Git Plugin documentation:

By default, the Jenkins Windows installer sets up Jenkins to run as a service on Windows, which runs as the “Local System account”, NOT your user account. Since the “Local System account” does not have SSH keys or known_hosts set up, “git clone” will hang during the build. It's possible to keep Jenkins running as the “Local System account” and clone repositories via SSH by making sure that the “Local System account” is set up with a properly configured .ssh directory (i.e. id_rsa, id_rsa.pub, AND known_hosts)

Các vấn đề liên quan