11

При попытке улучшить производительность моих сборок Android Gradle я наткнулся на демонов Gradle и использовал его с большим успехом для локальных сборок.Дженкинс строит сбой с помощью демона Gradle

Однако при работе под Дженкинс на 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. 

Multiple сборок может быть запущен параллельно. Если я запускаю сборку вручную, когда никакие другие сборки не работают, я не смог воспроизвести ее. Someone else столкнулся с этой проблемой, но рекомендуемым решением было просто отключить Gradle Daemon, который я не хочу делать. Я бы подумал, что большая, параллельная среда сборки будет именно тем, что Gradle Daemon был предназначен для оптимизации.

Или, если я не могу сделать Daewon Gradle надежно работать под Jenkins, почему бы и нет? Благодаря!

+1

Отличный вопрос, я нахожусь в той же конфигурации лодки. Я попытаюсь воспроизвести проблему локально и посмотреть, могу ли я предоставить решение. –

+0

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

+0

У меня такая же проблема, и я не могу ее исправить. Я отключил демона всеми возможными способами (флаг, переменная среды и т. Д.), Разные версии Gradle, различные настройки виртуальных машин от 64 м до 2 ГБ памяти. Я также попробовал 2 совершенно новых инсталляции, один на Ubuntu 16.04 и один на Ubuntu 14.04. Я, наконец, попробовал использовать разные версии Java как 7, так и 8 (хотя мне действительно нужно 8) и как OpenJDK, так и Oracle. К сожалению, ничего не работает. Я бы очень признателен за решение этой проблемы. На машинах Windows 7 и 10 все работает нормально. –

ответ

4

The Gradle Daemon включен по умолчанию с версии 3.0. Однако в official documentation до 4.2.1 указано, что вы не должны использовать демона на серверах непрерывной интеграции.

Рекомендуется, чтобы Daemon использовался во всех средах разработчиков. Рекомендуется отключить Daemon для непрерывной интеграции и создать серверные среды.

Daemon позволяет быстрее строить, что особенно важно, когда человек сидит перед сборкой. Для построения CI, стабильность и предсказуемость имеют первостепенное значение. Использование новой среды выполнения (т. Е. Процесса) для каждой сборки является более надежным, поскольку среда выполнения полностью изолирована от предыдущих сборок.

Эти рекомендации изменилось с тех пор, см Disabling the Daemon

С Gradle 3.0, мы включаем Daemon по умолчанию и рекомендуется использовать его для машин обоих разработчиков и серверов непрерывной интеграции. Однако, если вы подозреваете, что Daemon делает ваши CI-сборки неустойчивыми, вы можете отключить его для использования новой среды выполнения для каждой сборки, так как среда выполнения полностью изолирована от любых предыдущих сборок.

Смежные вопросы