Jenkins使用Gradle守护程序构建失败

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jenkins使用Gradle守护程序构建失败相关的知识,希望对你有一定的参考价值。

在尝试提高我的Gradle android版本的性能时,我偶然发现了Gradle Daemon,并且已经在本地构建中取得了巨大的成功。

但是,当在Ubuntu 14.04上的Jenkins下运行时,构建会间歇性地失败:

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 Daemon,我不想这样做。我认为一个大的并发构建环境正是Gradle Daemon想要优化的。

或者,如果我不能让Gradle Daemon在Jenkins下可靠地工作,为什么不呢?谢谢!

答案

自版本3.0以来,默认情况下启用Gradle守护程序。然而,official documentation直到4.2.1声明你不应该在持续集成服务器中使用守护进程。

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

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

从那时起,这些建议发生了变化,请参阅Disabling the Daemon

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

以上是关于Jenkins使用Gradle守护程序构建失败的主要内容,如果未能解决你的问题,请参考以下文章

Gradle 构建失败,出现错误“等待连接到 Grade 守护程序的超时”

如何在Kubernetes CI管道中使用Gradle守护程序?

FAILURE构建失败,但有异常

使用 gradle bootJar 而不是 jar 任务并在 Jenkins 中构建失败

当 JUnit 测试失败时,Mark Gradle 在 Jenkins 中构建不稳定

Gradle 构建挂起没有失败,DefaultFileLockManager 获取和释放守护进程地址注册表上的锁定