Дженкинс строит неудачу с помощью демона Gradle

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

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

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

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

1 ответ

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

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

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

С тех пор эта рекомендация изменилась, см. Отключение демона.

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

Другие вопросы по тегам