jenkins gradle continuous-integration android-gradle-plugin gradle-daemon

Jenkins construye fallos usando el demonio de Gradle



continuous-integration android-gradle-plugin (1)

Al intentar mejorar el rendimiento de mis versiones de Android de Gradle, tropecé con el Daemon de Gradle y lo he estado utilizando con gran éxito para las versiones locales.

Sin embargo, cuando se ejecuta bajo Jenkins en Ubuntu 14.04, las compilaciones fallan intermitentemente con:

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.

Se pueden ejecutar varias construcciones en paralelo. Si ejecuto una compilación manualmente cuando no se ejecutan otras compilaciones, no he podido reproducirla. Alguien más tenía este problema, pero la solución recomendada era simplemente deshabilitar el Daemon de Gradle, que no quiero hacer. Pienso que un entorno de construcción grande y concurrente sería exactamente lo que Gradle Daemon pretendía optimizar.

O, si no puedo hacer que el Daemon Gradle funcione de manera confiable bajo Jenkins, ¿por qué no? ¡Gracias!


El Daemon de Gradle está habilitado por defecto desde la versión 3.0 . Sin embargo, la documentación oficial hasta 4.2.1 indicaba que no debería usar el daemon en servidores de integración continua.

Se recomienda que el Daemon se utilice en todos los entornos de desarrollador. Se recomienda deshabilitar el Daemon para la integración continua y crear entornos de servidor.

El Daemon permite construcciones más rápidas, lo cual es particularmente importante cuando un humano está sentado frente a la construcción. Para las construcciones de CI, la estabilidad y la previsibilidad son de suma importancia. Usar un tiempo de ejecución nuevo (es decir, un proceso) para cada compilación es más confiable ya que el tiempo de ejecución está completamente aislado de las compilaciones anteriores.

Estas recomendaciones han cambiado desde entonces, vea Deshabilitar el daemon.

Desde Gradle 3.0, habilitamos Daemon de manera predeterminada y recomendamos su uso tanto para las máquinas de los desarrolladores como para los servidores de integración continua. Sin embargo, si sospecha que Daemon hace que sus compilaciones de CI sean inestables, puede deshabilitarlo para usar un nuevo tiempo de ejecución para cada compilación, ya que el tiempo de ejecución está completamente aislado de cualquier compilación anterior.