詹金斯使用渐变精灵构建失败



在试图提高Gradle Android构建的性能时,我偶然发现了Gradle Daemon,并在本地构建中成功地使用了它。

然而,当在Jenkins的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.

多个生成可能并行运行。如果我在没有其他构建运行的情况下手动运行构建,我就无法复制它。其他人也有这个问题,但建议的解决方案只是禁用Gradle Daemon,我不想这么做。我认为大型并发构建环境正是Gradle Daomon想要优化的。

或者,如果我不能让Gradle Daemon在詹金斯的领导下可靠地工作,为什么不呢?谢谢

Gradle守护程序自版本3.0起默认启用。但是,4.2.1之前的官方文档指出,您不应该在连续集成服务器中使用守护进程。

建议在所有开发人员环境中使用守护程序。建议禁用用于持续集成的守护程序并构建服务器环境。

Daemon可以实现更快的构建,当有人坐在构建前面时,这一点尤为重要。对于CI构建,稳定性和可预测性至关重要。为每个构建使用新的运行时(即进程)更可靠,因为运行时与以前的构建完全隔离。

自那以后,此建议已更改,请参阅禁用守护程序

自Gradle 3.0以来,我们默认启用Daemon,并建议将其用于开发人员的机器和持续集成服务器。但是,如果怀疑守护程序使CI生成不稳定,则可以禁用它,以便为每个生成使用新的运行时,因为该运行时与以前的任何生成完全隔离。