11

Trong khi cố gắng cải thiện hiệu suất của các bản dựng Android Gradle của mình, tôi tình cờ gặp Gradle Daemon, và đã sử dụng nó với thành công lớn cho các bản dựng cục bộ.Jenkins Builds Fail Sử dụng Gradle Daemon

Tuy nhiên, khi chạy dưới Jenkins trên Ubuntu 14.04, xây dựng được liên tục thất bại với:

Starting process 'Gradle Test Executor 2'. Working directory: /tmp/myproject/android/example Command: /usr/lib/jvm/java-8-oracle/bin/java -Djava.awt.headless=true -Djava.security.manager=worker.org.gradle.process.internal.worker.child.BootstrapSecurityManager -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -ea -cp /data/var/lib/jenkins/.gradle/caches/2.14.1/workerMain/gradle-worker.jar worker.org.gradle.process.internal.worker.GradleWorkerMain 'Gradle Test Executor 2' 
Successfully started process 'Gradle Test Executor 2' 
Daemon vm is shutting down... The daemon has exited normally or was terminated in response to a user interrupt. 
Starting process 'Gradle Test Executor 3'. Working directory: /tmp/myproject/android/example Command: /usr/lib/jvm/java-8-oracle/bin/java -Djava.awt.headless=true -Djava.security.manager=worker.org.gradle.process.internal.worker.child.BootstrapSecurityManager -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -ea -cp /[...]/.gradle/caches/2.14.1/workerMain/gradle-worker.jar worker.org.gradle.process.internal.worker.GradleWorkerMain 'Gradle Test Executor 3' 
----- End of the daemon log ----- 


FAILURE: Build failed with an exception. 

* What went wrong: 
Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed) 

* Try: 
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output. 
Error: Failed to run test (./gradlew --console=plain --info test -p myproject). 

    FAILURE: Build failed with an exception. 

Nhiều bản xây dựng có thể chạy song song. Nếu tôi chạy một bản dựng theo cách thủ công khi không có bản dựng nào khác đang chạy, tôi không thể tái tạo nó. Someone else có vấn đề này, nhưng giải pháp được đề nghị chỉ là vô hiệu hóa Gradle Daemon, mà tôi không muốn làm. Tôi nghĩ rằng một môi trường xây dựng lớn, đồng thời sẽ chính xác là những gì Gradle Daemon có ý định tối ưu hóa.

Hoặc, nếu tôi không thể làm cho Gradle Daemon hoạt động đáng tin cậy dưới Jenkins, tại sao không? Cảm ơn!

+1

Câu hỏi hay, tôi đang ở trong cùng một cấu hình thuyền chính xác. Tôi sẽ cố gắng tái tạo sự cố tại địa phương và xem liệu tôi có thể cung cấp giải pháp hay không. –

+0

Hmm, https://docs.gradle.org/current/userguide/gradle_daemon.html#when_should_i_not_use_the_gradle_daemon –

+0

Tôi gặp vấn đề tương tự và dường như tôi không thể khắc phục. Tôi vô hiệu hóa daemon trong tất cả các cách có thể (cờ, biến môi trường, vv), các phiên bản Gradle khác nhau, các thiết lập VM khác nhau, từ 64m tối đa đến 2GB bộ nhớ. Tôi cũng đã thử 2 bản cài đặt hoàn toàn mới, một trên Ubuntu 16.04 và một trên Ubuntu 14.04. Cuối cùng tôi đã thử sử dụng các phiên bản Java khác nhau cả 7 và 8 (mặc dù tôi thực sự cần 8) và cả VM của OpenJDK và Oracle. Thật không may không có gì hoạt động. Tôi thực sự sẽ đánh giá cao một giải pháp cho vấn đề này. Trên máy tính Windows 7 và 10, mọi thứ đều chạy tốt. –

Trả lời

4

Gradle Daemon được bật theo mặc định từ phiên bản 3.0. Tuy nhiên, official documentation cho đến khi 4.2.1 tuyên bố rằng bạn không nên sử dụng daemon trong các máy chủ tích hợp liên tục.

Chúng tôi khuyên rằng Daemon được sử dụng trong tất cả các môi trường nhà phát triển. Bạn nên vô hiệu hóa Daemon cho Continuous Integration và xây dựng môi trường máy chủ.

Daemon cho phép xây dựng nhanh hơn, điều đặc biệt quan trọng khi một người ngồi trước tòa nhà. Đối với CI xây dựng, sự ổn định và khả năng dự đoán là vô cùng quan trọng. Việc sử dụng thời gian chạy mới (tức là quy trình) cho mỗi bản dựng là đáng tin cậy hơn khi thời gian chạy hoàn toàn tách biệt với các bản dựng trước đó.

khuyến nghị này đã thay đổi kể từ đó, xem Disabling the Daemon

Kể từ Gradle 3.0, chúng tôi cho phép Daemon theo mặc định và khuyên bạn sử dụng nó cho các máy cả các nhà phát triển và các máy chủ tích hợp liên tục. Tuy nhiên, nếu bạn nghi ngờ rằng Daemon làm cho CI của bạn xây dựng không ổn định, bạn có thể vô hiệu hóa nó để sử dụng thời gian chạy mới cho mỗi bản dựng vì thời gian chạy hoàn toàn tách biệt với bất kỳ bản dựng trước nào.

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