2013-06-25 21 views
16

Lỗi:git plugin cho Jenkins không sao chép một repo từ máy địa phương. mã lỗi 128

Failed to connect to repository : Command "/usr/bin/git ls-remote -h file:///home/myuser/path/to/project HEAD" returned status code 128: 
stdout: 
stderr: fatal: 'home/myuser/path/to/project' does not appear to be a git repository 
fatal: The remote end hung up unexpectedly 

Tôi đã thử những điều sau đây:

  • chmod 777 vào thư mục repo (thư mục chứa thư mục .git)
  • chowned-jenkins:jenkins vào thư mục repo
  • cố gắng sao chép vào một thư mục khác từ thư mục repo cục bộ này: hoạt động này!

Khi tôi chạy lệnh trên: /usr/bin/git ls-remote -h file:///home/myuser/path/to/project HEAD vào cmd tôi nhận được các chi nhánh.

Câu hỏi của tôi là:

  1. tại sao git ls-remote -h ... lệnh gọi khi nó phải được git clone ...?
  2. Làm thế nào để cấu hình Jenkins git plugin để lấy mã từ repo địa phương

môi trường của tôi:

RHEL 5.9

Jenkins 1,519 cài đặt như một dịch vụ (không chứa Web)

Git plugin

+4

Dù vấn đề bạn đang cố gắng để giải quyết, ** 'chmod 777' là một antipattern tàn bạo và một vấn đề bảo mật tiềm năng ** Bạn nên trở lại sự thay đổi này càng sớm càng tốt.. – tripleee

+0

Tôi đồng ý! ... Vui lòng xem câu trả lời đã chọn. – Vikram

Trả lời

15

Khi cài đặt Jenkins như một dịch vụ, theo mặc định, Jenkins không tạo ra một thư mục người dùng như trong: /home/jenkins. Thư mục chính mặc định của Jenkins được đặt thành /var/lib/jenkins. Từ công việc của tôi, như bạn mong đợi, jenkins gặp sự cố khi truy cập tài nguyên cục bộ từ thư mục người dùng khác.

tôi chuyển repo nhân bản của tôi dưới Jenkins thư mục chủ mặc định nghĩa là dưới /var/lib/jenkins nên Repository URL trong dự án Jenkins cấu hình của tôi trông giống như: file:///${JENKINS_HOME}/repo/<myprojectname>

UPDATE: Trên đây hoạt động tốt ...nhưng tôi tìm thấy một cách tốt hơn để làm điều đó từ this blog

Các bước được nêu ở đây:

nhìn lên /etc/init.d/jenkins kịch bản. Có một vài biến số $JENKINS được xác định . Điều này sẽ dẫn bạn đến số sysconfig cho jenkins tức là /etc/sysconfig/jenkins. Dừng Jenkins dụ của bạn:

sudo /sbin/service jenkins stop

Hãy sao lưu

cp /etc/sysconfig/jenkins /etc/sysconfig/jenkins.bak

Trong tập tin này, thay đổi thuộc tính sau:

$JENKINS_USER="<your desired user>"

Thay đổi sở hữu của tất cả các liên quan Thư mục Jenkins:

chown -R <your desired user>:<your user group> /var/lib/jenkins

chown -R <your desired user>:<your user group> /var/cache/jenkins

chown -R <your desired user>:<your user group> /var/log/jenkins

Jenkins Restart và lỗi mà nên biến mất

sudo /sbin/service jenkins start

Lỗi này sẽ biến mất bây giờ!

+1

không .. nó hoạt động sau khi thay đổi quyền sở hữu các thư mục đó thành người dùng "jenkins" – Varshith

+1

Trong Ubuntu mới nhất ít nhất bạn cũng cần phải xem xét sử dụng khác của $ NAME trong tệp sysconfig/defaults. Ngay cả tham chiếu đến tệp "jenkins.war" thực sự là $ NAME.war. –

3
  1. Jenkins chỉ sử dụng lệnh git clone lần đầu tiên khi không gian làm việc được định cấu hình cho một dự án. Các phiên bản khác sử dụng lệnh git ls-remote.

  2. Tôi gặp vấn đề tương tự khi tôi định cấu hình Jenkins. Nó đã được giải quyết bằng cách chơi xung quanh với các phím SSH. Điều này cũng giống như một vấn đề cấu hình. Kiểm tra xem Khóa SSH có được thiết lập cho tài khoản Jenkins không.

Ngoài ra, hãy xem quy trình từng bước cấu hình SSH trong liên kết được cung cấp. Điều này có thể không cung cấp cho bạn giải pháp chính xác, nhưng có thể chỉ cho bạn giải pháp.

http://oodlestechnologies.com/blogs/How-to-setup-Jenkins-With-Grails-on-Ubuntu

+0

cảm ơn những gợi ý này! – Vikram

+0

theo liên kết của bạn, tôi đã thêm jenkins vào danh sách sudo 'jenkins ALL = (ALL: ALL) ALL' Thật không may, nó vẫn không thể sao chép repo từ tập tin cục bộ ... cảm ơn lần nữa! – Vikram

+0

Nếu bạn đang sử dụng Jenkins với tư cách là người dùng trên hệ điều hành, bạn có kiểm tra xem bạn có khóa SSH được đặt trong thư mục% userprofile% –

7

Đã lâu rồi kể từ khi câu hỏi này được hỏi, nhưng hôm nay tôi có vấn đề này và có rất ít tài nguyên. Có lẽ, bởi vì mọi người có xu hướng kết nối với kho git từ xa.

Tôi đã kiểm tra bằng cách sử dụng strace chính xác jenkins đã làm gì và có, đó là vấn đề với quyền.

Nhưng tôi giải quyết nó một cách đơn giản hơn câu trả lời # 2 - bằng cách thêm Jenkins vào nhóm git máy chủ - trong trường hợp của tôi, git1: root# gpasswd -a jenkins git1 root# service jenkins restart

+1

Cảm ơn rất nhiều! Tôi đã thêm Jenkins vào nhóm git nhưng tôi cũng cần khởi động lại dịch vụ Jenkins mà tôi đã thử đọc câu trả lời của bạn, và nó đã hoạt động! Bây giờ tôi chỉ sử dụng /opt/git/repo.git trong cấu hình Jenkins của mình và tôi đã loại bỏ mã Lỗi 128. – B2F

5

Tôi đang chạy Jenkins trên Windows và có cùng một vấn đề . Tôi đã có thể giải quyết vấn đề này bằng cách đăng nhập dịch vụ Jenkins với tư cách là người dùng trên máy tính xách tay của mình.

(Windows 7)

  1. mở Task Manager (Ctrl + Shift + Thoát)
  2. Chuyển đến Dịch vụ tab
  3. Nhấp vào Dịch vụ ... nút
  4. Find "Jenkins" trong danh sách các dịch vụ
  5. Kích chuột phải vào "Jenkins" và click vào Thuộc tính
  6. Nhấp vào Đi Vào tab trong Jenkins Thuộc tính cửa sổ
  7. Chọn Tài khoản này: dưới Đăng nhập với:
  8. Nhập tên người dùng và mật khẩu của bạn
  9. Bấm OK
  10. Khởi động lại dịch vụ Jenkins
  11. Sau đó, Bob chú của bạn.
+0

nếu bạn chạy với 'java -jar jenkins.war', điều này có cần thiết không? thx :) –

+0

@EnriqueSanMartin: Có khả năng bạn vẫn có thể. Tất cả phải làm với các quyền của người dùng đang chạy tiến trình Java. –

0

Tôi thấy rằng các giải pháp khác hơi "hacky" đối với tôi. Những gì tôi đã làm là di chuyển thư mục Jenkins Home từ/Users/Shared/to/Users/[myacccount] /. Bằng cách này, Jenkins của tôi sẽ có quyền truy cập vào repos của tôi và SDK Android của tôi (vì đó là nơi tôi sử dụng Jenkins cho). Sau đó thay đổi biến môi trường JENKINS_HOME. Tôi đã làm điều này bằng cách nhập JENKINS_HOME trong .bash_profile của tôi (nhưng có nhiều cách khác để làm điều này).

Lưu ý: Tôi sử dụng OSX