11

내 Gradle Android 빌드의 성능을 향상 시키려고 시도하면서 Gradle Daemon을 발견하고 로컬 빌드에 큰 성공을 거두었습니다.Gendle 데몬을 사용하여 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. 

다중 병렬로 실행될 수있는 빌드 : 우분투 14.04에 젠킨스에서 실행할 때

그러나, 일시적으로 실패 만든다. 다른 빌드가 실행되고 있지 않을 때 수동으로 빌드를 실행하면이를 재현 할 수 없습니다. Someone else에는이 문제가 있지만, 권장하지 않는 해결책은 단지 원하지 않는 Gradle Daemon을 비활성화하는 것입니다. 큰 규모의 동시 빌드 환경이 바로 Gradle Daemon이 최적화하려고했던 것과 같을 것입니다.

젠킨스에서 Gradle Daemon을 안정적으로 작동시키지 못하면 왜 안 되니? 감사!

+1

대단한 질문이지만, 나는 똑같은 보트 구성과 똑같습니다. 문제를 로컬에서 재현하고 솔루션을 제공 할 수 있는지 확인합니다. –

+0

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

+0

동일한 문제가있어서 해결할 수없는 것 같습니다. 모든 가능한 방법 (플래그, 환경 변수 등), 다른 Gradle 버전, 64M에서 2GB 메모리까지의 다양한 VM 설정으로 데몬을 비활성화했습니다. 우분투 16.04와 우분투 14.04에서 완전히 새로운 설치를 시도했습니다. 나는 마침내 다른 자바 버전 7과 8 (실제로 8이 필요하지만)과 OpenJDK와 오라클의 VM을 모두 사용해 보았습니다. 불행히도 아무것도 작동하지 않습니다. 나는이 문제에 대한 해결책을 정말로 고맙게 생각한다. Windows 7 및 10 머신에서는 모든 것이 정상적으로 실행됩니다. –

답변

4

버전 3.0 이후 기본적으로 Gradle Daemon이 활성화됩니다. 그러나 official documentation에서 4.2.1까지는 연속 통합 서버에서 데몬을 사용하지 않아야한다고 명시했습니다.

모든 개발자 환경에서 데몬을 사용하는 것이 좋습니다. 지속적인 통합을 위해 데몬을 비활성화하고 서버 환경을 구축하는 것이 좋습니다.

데몬을 사용하면 빌드가 더 빨라지고 특히 인간이 빌드 앞에 앉아있을 때 특히 중요합니다. CI 빌드의 경우 안정성과 예측 가능성이 가장 중요합니다. 런타임이 이전 빌드와 완전히 분리되어 있기 때문에 각 빌드에 대해 새로운 런타임 (즉, 프로세스)을 사용하는 것이 더 안정적입니다.

이 권장 Disabling the Daemon

가 Gradle을 3.0 이후, 우리는 기본적으로 데몬을 활성화하고 모두 개발자의 기계 및 지속적인 통합 서버를 사용하는 것이 좋습니다 참조, 그 이후로 변경되었습니다. 그러나 데몬이 CI 빌드를 불안정하게 만들었다 고 생각되면 런타임이 이전 빌드와 완전히 분리되어 있기 때문에 각 빌드에 대해 새로운 런타임을 사용하도록 비활성화 할 수 있습니다.