11

在嘗試提高我的Gradle Android構建的性能時,我偶然發現了Gradle守護進程,並且一直在本地構建中使用它,並取得了巨大成功。Jenkins構建失敗使用Gradle守護進程

然而,在Ubuntu 14.04詹金斯下運行時,建立與被間歇失敗:

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. 

多個構建可以並行運行。如果我在沒有其他構建正在運行時手動運行構建,則我無法再現它。 Someone else有這個問題,但推薦的解決方案只是禁用Gradle守護進程,我不想這樣做。我認爲一個大的,併發的構建環境正是Gradle Daemon打算優化的。或者,如果我無法在Jenkins下可靠地工作Gradle Daemon,爲什麼不呢?謝謝!

+1

偉大的問題,我在完全相同的船配置明智。我會嘗試在本地重現問題,看看我能否提供解決方案。 –

+0

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

+0

我有同樣的問題,我似乎無法修復它。我以各種可能的方式禁用守護進程(標誌,環境變量等),不同的Gradle版本,不同的VM設置,範圍從64m到2GB不等。我還嘗試了2個全新的安裝,一個安裝在Ubuntu 16.04上,另一個安裝在Ubuntu 14.04上。我終於嘗試了使用不同的Java版本(包括7和8)(儘管我真的需要8)以及OpenJDK和Oracle的VM。不幸的是沒有用。我真的很感謝這個問題的解決方案。在Windows 7和10機器上,一切運行良好。 –

回答

4

從版本3.0開始,默認啓用Gradle守護進程。但是,official documentation直到4.2.1聲明,您不應該在持續集成服務器中使用守護進程。

建議在所有開發人員環境中使用守護程序。建議禁用用於持續集成的守護進程並構建服務器環境。

守護進程可以實現更快的構建,這在人類坐在構建前面時尤爲重要。對於CI構建而言,穩定性和可預測性至關重要。對於每個版本使用全新的運行時(即進程)更加可靠,因爲運行時與以前的版本完全隔離。從那時起

此建議已經改變了,看到Disabling the Daemon

由於搖籃3.0,我們默認啓用守護進程,並建議將其用於開發員的機器和持續集成服務器。但是,如果您懷疑守護進程會使您的CI構建不穩定,則可以將其禁用,以便爲每個構建使用全新的運行時,因爲運行時與以前的任何構建完全隔離。