web-dev-qa-db-ja.com

JenkinsがGradleデーモンを使用して失敗する

Gradle Androidビルドのパフォーマンスを改善しようとしているときに、Gradle Daemonに出会い、ローカルビルドで大成功を収めました。

ただし、Ubuntu 14.04の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.

複数のビルドが並行して実行されている可能性があります。他のビルドが実行されていないときに手動でビルドを実行すると、それを再現できません。 他の誰か にこの問題がありましたが、推奨される解決策は、Gradle Daemonを無効にすることでした。大規模な同時ビルド環境は、Gradle Daemonが最適化することを意図したものだと思います。

または、ジェンキンスの下でGradle Daemonを確実に機能させることができない場合は、どうしてですか?ありがとう!

18
Will

Gradle Daemonは、バージョン3.0以降、デフォルトで有効になっています。ただし、4.2.1が継続的インテグレーションサーバーでデーモンを使用するべきではないと記載するまでの 公式ドキュメント

デーモンは、すべての開発環境で使用することをお勧めします。継続的インテグレーションのデーモンを無効にし、サーバー環境を構築することをお勧めします。

デーモンを使用すると、ビルドを高速化できます。これは、人間がビルドの前に座っている場合に特に重要です。 CIビルドでは、安定性と予測可能性が最も重要です。ランタイムは以前のビルドから完全に分離されているため、ビルドごとに新しいランタイム(つまり、プロセス)を使用する方が信頼性が高くなります。

この推奨事項はそれ以降変更されています。 デーモンの無効化 を参照してください

Gradle 3.0以降、デフォルトでデーモンを有効にしているため、開発者のマシンと継続的インテグレーションサーバーの両方でデーモンを使用することをお勧めします。ただし、DaemonによってCIビルドが不安定になると思われる場合は、ランタイムを以前のビルドから完全に分離しているため、それを無効にして、各ビルドで新しいランタイムを使用できます。

13
thokuest