2011-12-27 35 views
49

Tôi đã cài đặt plugin Gradle cho Jenkins. Khi tôi cố gắng xây dựng dự án, tôi nhận được lỗi sau:Không thể chạy chương trình "gradle" trong Jenkins

[workspace] $ gradle clean -b build/build.gradle 
FATAL: command execution failed 
java.io.IOException: Cannot run program "gradle" (in directory "/Users/Shared/Jenkins/Home/jobs/test/workspace"): error=2, No such file or directory 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:460) 
    at hudson.Proc$LocalProc.<init>(Proc.java:244) 
    at hudson.Proc$LocalProc.<init>(Proc.java:216) 
    at hudson.Launcher$LocalLauncher.launch(Launcher.java:707) 
    at hudson.Launcher$ProcStarter.start(Launcher.java:338) 
    at hudson.Launcher$ProcStarter.join(Launcher.java:345) 
    at hudson.plugins.gradle.Gradle.performTask(Gradle.java:201) 
    at hudson.plugins.gradle.Gradle.perform(Gradle.java:97) 
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:19) 
    at hudson.model.AbstractBuild$AbstractRunner.perform(AbstractBuild.java:695) 
    at hudson.model.Build$RunnerImpl.build(Build.java:178) 
    at hudson.model.Build$RunnerImpl.doRun(Build.java:139) 
    at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:465) 
    at hudson.model.Run.run(Run.java:1404) 
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46) 
    at hudson.model.ResourceController.execute(ResourceController.java:88) 
    at hudson.model.Executor.run(Executor.java:238) 
Caused by: java.io.IOException: error=2, No such file or directory 
    at java.lang.UNIXProcess.forkAndExec(Native Method) 
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:53) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:91) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:453) 
    ... 16 more 
Build step 'Invoke Gradle script' changed build result to FAILURE 
Build step 'Invoke Gradle script' marked build as failure 
Finished: FAILURE 

Chạy nhiệm vụ $ gradle clean -b build/build.gradle từ dòng lệnh hoạt động như mong đợi.

+0

Bạn chắc chắn rằng Jenkins có con đường gradle đúng? Tôi không có sẵn máy xây dựng của mình, nhưng tôi nghĩ bạn phải định cấu hình đường dẫn nhà gradle cho plugin gradle. – thoredge

+0

Đường dẫn tương tự như trong hồ sơ của tôi. –

+0

"Không có tệp hoặc thư mục nào" là khá rõ ràng. Jenkins không thể tìm thấy tập tin 'gradle'. Có lẽ nó không phải là trên đường dẫn của người dùng hệ điều hành chạy công việc Jenkins. Trong mọi trường hợp, tôi khuyên bạn nên sử dụng Gradle Wrapper trên máy CI. –

Trả lời

57

Tôi gặp vấn đề tương tự và nhận thấy rằng sự cố đối với tôi là phiên bản gradle trong cấu hình dự án. Nó được đặt thành Mặc định và khi tôi đặt nó thành phiên bản gradle tôi đã trỏ đến trong cấu hình plugin trong số Quản lý Jenkins>Tùy chọn cấu hình.

Đây là một vấn đề khó khăn để gỡ lỗi và tôi hy vọng điều này sẽ giúp người khác tiết kiệm thời gian.

+0

Có, thử nghiệm cho tôi rằng đây là trường hợp, hộp thả xuống để chọn Gradle phiên bản đã được ẩn, và tôi đã phải chọn rõ ràng nút radio phiên bản Gradle cho nó để hiển thị, tôi nghĩ rằng đây là một lỗi. Sau khi chọn phiên bản Gradle (không phải mặc định), nó hoạt động tốt. Cảm ơn. –

+0

Điều này làm việc như một say mê! Nhìn không xa hơn! – geoand

+2

Làm cách nào để bạn nhập hoặc chọn phiên bản gradle thực tế một cách rõ ràng? nó không cho phép tôi chọn bất cứ điều gì khác ngoài mặc định – jonney

1

Các jenkins không thể tìm thấy tệp thực thi gradle. Tôi chưa bao giờ làm wrapper gradle để làm việc. Hãy làm theo các bước sau:

  • Tải gradle (http://gradle.org/downloads),
  • giải nén nó vào, ví dụ:/usr/local/lib/gradle,
  • mở/etc/profile và thêm hai dòng sau :
  • xuất khẩu GRADLE_HOME =/usr/local/lib/gradle
  • export PATH = $ PATH: $ GRADLE_HOME/bin

Nó hoạt động cho my jenkins installation .

ps. Tôi trả lời câu hỏi cũ này, bởi vì nó là một vấn đề phổ biến khi thiết lập gradle với jenkins. Tôi đã dành một số thời gian cố gắng để làm cho công việc wrapper gradle mà không thành công trước đây.

+0

Tôi đã đặt gradle_home trong bash_profile, vẫn là vấn đề tương tự đối với tôi –

0

Như những người khác đã lưu ý, điều này là do Jenkins không thể tìm thấy thực thi gradle.

Không có giải pháp nào được công bố cho tôi, nhưng tôi có thể khắc phục sự cố bằng cách thêm thư mục bin gradle vào đường dẫn được đặt trong .bashrc cho tài khoản xây dựng trên slave xây dựng. Sửa đổi .profile không thành công và thiết lập PATH trong cấu hình nút jenkins cũng không thành công.

Một số bài đăng sẽ đề xuất thiết lập đường dẫn gradle trong menu công cụ, nhưng không có mục nhập gradle có sẵn ở đó (có lẽ do hồi quy/thay đổi thiết kế trong plugin gradle?).

Trong mọi trường hợp, các bài kiểm tra tốt nhất mà tôi tìm thấy (viết tắt của chạy việc xây dựng một lần nữa và xem cho thất bại) là để chạy env qua ssh:

ssh <host> env 

và kiểm tra các biến PATH được xác định theo cách đó; nếu gradle không có trong con đường đó, có thể bạn sẽ không thể chạy nó từ jenkins.

20

Giải pháp Mastering_the_Object chỉ ra làm việc tạo cho tôi quá, chỉ cần làm rõ các bước đó:
chỉ cần cài đặt plugin trong Gradle Jenkins là không đủ, bạn cũng phải đến:
Jenkins-> Manage Jenkins-> Configure Jenkins -> Cấu hình hệ thống.
Trong loại "Cài đặt Gradle" loại (nó xuất hiện dưới dạng phiên bản trong cấu hình dự án), chọn "Cài đặt tự động" và chọn phiên bản. Sau đó, bạn có thể chọn "Phiên bản Gradle" trong cấu hình dự án.

+0

+1 Để chỉ ra giải pháp về cách tìm địa điểm cấu hình. Đã thấy nhiều đề xuất để thay đổi cài đặt nhưng không ai đề xuất nơi tìm thấy nó. – Lmickos

+0

@pad điều này đã giúp tôi quá. Cảm ơn. – DMA

1

Sử dụng cả hai @Skarab & một số giải pháp khác ở đây để làm cho nó hoạt động.

Tải gradle (http://gradle.org/downloads), giải nén nó vào, ví dụ:/usr/local/lib/gradle, mở/etc/profile và thêm hai dòng sau: xuất khẩu GRADLE_HOME =/usr/local/lib/gradle export PATH = $ PATH: $ GRADLE_HOME/bin

Sau đó, dưới Manage hệ thống Jenkins> Configure> Gradle, được xác định GRADLE_HOME và cho rằng cài đặt gradle một tên

Sau đó, {đây có thể là lỗi} cho dự án, thay đổi phiên bản gradle từ Mặc định thành phiên bản tôi đã xác định ở trên

11

Khi chạy Gradle trên máy CI như Jenkins, thuận tiện nhất để sử dụng Gradle Wrapper.

Trên máy tính của bạn phát triển, đứng trong thư mục dự án gốc của bạn và chạy

gradle wrapper 

Sau đó, kiểm tra trong các tập tin kết quả vào hệ thống kiểm soát nguồn của bạn. Sau đó, bạn không phải cài đặt bất cứ thứ gì trên máy chủ Jenkins của bạn nếu bạn cần thay đổi phiên bản Gradle. Chỉ cần cấu hình công việc Jenkins của bạn như thế này:

enter image description here

Trích dẫn từ Gradle User Guide:

By distributing the wrapper with your project, anyone can work with it without needing to install Gradle beforehand. Even better, users of the build are guaranteed to use the version of Gradle that the build was designed to work with. Of course, this is also great for continuous integration servers (i.e. servers that regularly build your project) as it requires no configuration on the server.

+0

Đây không phải là một gợi ý hợp lý cho hầu hết mọi doanh nghiệp. Điều quan trọng là chúng tôi tin tưởng các nguồn của các đồ tạo tác của chúng tôi, và do đó hầu hết các doanh nghiệp sử dụng một kho lưu trữ nội bộ. GradleW chỉ hoạt động nếu nó có quyền truy cập vào internet. Tôi không nói rằng điều này là không hợp lý trong các môi trường khác, tôi chỉ chỉ ra rằng nó có thể sẽ không hoạt động trong một doanh nghiệp. –

+3

Không phải như vậy. Trình bao bọc này hài lòng với bất kỳ URL nào bạn cung cấp, vì vậy nó không cần truy cập Internet. Chúng ta có một bản sao Gradle được lưu trữ cục bộ, trong một máy chủ Artifactory (bất kỳ máy chủ HTTP nào cũng sẽ làm). 'Gradle-wrapper.properties' cần được trỏ đến URL nội bộ thay vì repo chính thức. Điều này cũng giảm tải máy chủ chính thức và cung cấp tốc độ xây dựng tốt hơn cho người dùng địa phương của chúng tôi. Sau lần tải xuống đầu tiên của trình bao bọc, bạn không cần kết nối mạng để xây dựng trên PC của mình - và các máy CI có quyền truy cập liên tục vào repo cục bộ của chúng tôi. – Jolta

+1

Sử dụng một trình bao bọc thực sự là một giải pháp tốt hơn vì bạn không cần phải làm tất cả các công việc khó khăn xung quanh phù hợp với các phiên bản trong cấu hình toàn cầu của jenkin và cấu hình của dự án. Đơn giản hơn nhiều! – iCrus

6

tôi đã nhận được lỗi này bằng cách sử dụng wrapper Gradle, đã có thể sửa chữa gãy build của tôi như sau:

  1. Đi tới Quản lý Jenkins -> Cấu hình công cụ toàn cầu -> Gradle -> Thêm Gradle, gi đã cho nó một tên
  2. Đến Jenkins -> (công việc của bạn) -> Configure -> Xây dựng, chọn "Gọi Gradle" và thay đổi phiên bản Gradle từ (Default) lên phiên bản tên
Các vấn đề liên quan