2017-03-06 8 views
0

私は、スプリットビルドと実行環境を持つコンテナベースのCI/CDシステムでGradleをセットアップしています。ビルドでは、プロジェクトのディスクは書き込み可能です。実行時には、選択されたディレクトリだけが書き込み可能であり、これらのディレクトリはビルド中に使用できません。これは、2つの間の明確な分離です。実行するためにはどのファイルに書き込み可能なファイルが必要ですか?

私が実行している問題は、ビルドステップでgradlew buildを実行すると動作しますが、プロダクション環境(読み取り専用ファイルシステム上)でgradlew runを実行すると失敗します。具体的には、実行時にプロジェクトを再コンパイルしようとしましたが、失敗しました(当然、ファイルシステムは読み取り専用なので)。しかし、もしそれが既にコンパイルされているなら、それはなぜ再コンパイルしていますか?

私はbuild.gradleディレクトリの両方を実行時書き込み可能にしようとしました。それはうまくいき、gradlewはシステム全体をもう一度再コンパイルし、それらのディレクトリに書き出して実行します。私がbuildディレクトリを再び読み取り専用にすると、それは引き続き機能します。私には、実行時に書き込み可能にする必要がある.gradleの部分があることが示唆されていますが、これまでのところ、「すべてとすべて」以外の組み合わせは見つかりませんでした。 (1回限りのビルドを行った後、ディレクトリマウントを行うのは、繰り返し実行するビルドではないため、実際には実用的ではありません)。原因はです。私の最高の理論は、最初に.gradleになっているにもかかわらず、最初にgradleを再ダウンロードしたいというgradlewが存在する場合でも、既存のすべての生成済みファイルをスキップするということです。そのため、たとえbuildディレクトリが読み取り専用であっても、1つのビルドを成功させると、将来のビルドでそれを修正できます。

一般的に、.gradleの部分は、読み取り専用環境で動作するように構築されたアプリケーションを実行可能にする必要がありますか?または、より一般的には、期間限定の読み取り専用環境で、Gradleで作成されたアプリケーションを動作させるにはどうすればよいですか?

+0

gradlew runを使用して、本番環境でプロジェクトを実行しないでください。ビルドで生成されたアーティファクトを実行/展開するだけです。 –

答えて

1

生産時にプロジェクトを実行するためにGradleを使用しないでください。 Gradleはビルドツールであり、applicationプラグインによって追加されるrunタスクはテスト目的のみです。配布可能なものを作成してそれを運用時に使用したくない場合は、プロジェクトディレクトリを使い果たしたい場合は、少なくともinstallDistをビルド時に使用し、プロジェクトをbuild/install/...に組み込んで実行します。生成された開始スクリプト。

関連する問題