21

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 が最適化しようとしていたものだと思います。

または、Jenkins の下で Gradle Daemon を確実に動作させることができないのはなぜですか? ありがとう!

4

1 に答える 1

16

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

すべての開発者環境でデーモンを使用することをお勧めします。継続的統合のためにデーモンを無効にし、サーバー環境を構築することをお勧めします。

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

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

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

于 2017-01-13T16:11:35.553 に答える