11

Beim Versuch, die Leistung meiner Gradle Android Builds zu verbessern, bin ich auf den Gradle Daemon gestoßen und habe ihn mit großem Erfolg für lokale Builds verwendet.Jenkins Builds Fehler beim Verwenden des Gradle Daemon

Wenn jedoch unter Jenkins auf Ubuntu 14.04 ausgeführt wird, werden baut intermittierend andernfalls mit:

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. 

mehr Builds parallel ausgeführt werden kann. Wenn ich ein Build manuell ausführe, wenn keine anderen Builds laufen, konnte ich es nicht reproduzieren. Someone else hatte dieses Problem, aber die empfohlene Lösung bestand nur darin, den Gradle Daemon zu deaktivieren, was ich nicht tun möchte. Ich würde denken, dass eine große, gleichzeitige Build-Umgebung genau das wäre, was Gradle Daemon optimieren sollte.

Oder, wenn ich den Gradle Daemon unter Jenkins nicht zuverlässig arbeiten lassen kann, warum nicht? Vielen Dank!

+1

Große Frage, ich bin in der gleichen Boot Konfiguration-weise. Ich werde versuchen, das Problem lokal zu reproduzieren und zu sehen, ob ich eine Lösung bereitstellen kann. –

+0

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

+0

Ich habe das gleiche Problem und ich kann nicht scheinen, es zu beheben. Ich habe den Daemon auf alle möglichen Arten deaktiviert (Flag, Umgebungsvariable etc.), verschiedene Gradle-Versionen, verschiedene VM-Einstellungen von 64m Max bis 2gb Speicher. Ich habe auch 2 komplett neue Installationen ausprobiert, eine auf Ubuntu 16.04 und eine auf Ubuntu 14.04. Ich habe schließlich versucht, verschiedene Java-Versionen sowohl 7 und 8 (obwohl ich wirklich 8 brauche) und beide OpenJDKs und Oracle VMs. Leider klappt nichts. Ich würde wirklich eine Lösung für dieses Problem schätzen. Auf einem Windows 7 und 10 Rechner läuft alles einwandfrei. –

Antwort

4

Der Gradle Daemon ist standardmäßig seit Version 3.0 aktiviert. Die official documentation bis 4.2.1 besagt jedoch, dass Sie den Daemon nicht in Servern für die kontinuierliche Integration verwenden sollten.

Es wird empfohlen, den Daemon in allen Entwicklerumgebungen zu verwenden. Es wird empfohlen, den Daemon für Continuous Integration zu deaktivieren und Serverumgebungen zu erstellen.

Der Daemon ermöglicht schnellere Builds, was besonders wichtig ist, wenn ein Mensch vor dem Build sitzt. Für CI-Builds ist Stabilität und Vorhersagbarkeit von größter Bedeutung. Die Verwendung einer neuen Laufzeit (d. H. Prozess) für jeden Build ist zuverlässiger, da die Laufzeit vollständig von früheren Builds isoliert ist.

Diese Empfehlungen hat sich seitdem verändert, Disabling the Daemon

Seit Gradle 3.0 finden wir Daemon standardmäßig aktiviert und kann es für beide Entwickler Maschinen und Continuous Integration Server verwenden. Wenn Sie jedoch vermuten, dass Daemon dazu führt, dass Ihr CI instabil wird, können Sie es deaktivieren, um eine neue Laufzeit für jeden Build zu verwenden, da die Laufzeit vollständig von früheren Builds isoliert ist.