J2EE / Java Webアプリをデプロイする2つの主な方法(非常に単純な意味で):
組み立てられたアーティファクトをプロダクションボックスにデプロイする
ここでは、.war
他の場所(またはその他)を作成し、本番用に構成して(場合によっては、多数のボックスに対して多数のアーティファクトを作成し)、結果のアーティファクトを本番サーバーに配置します。
- 長所:本番ボックスに開発ツールがなく、テストからのアーティファクトを直接再利用できます。デプロイを行うスタッフは、ビルドプロセスの知識を必要としません。
- 短所:アーティファクトを作成および展開するための2つのプロセス。事前に構築されたアーティファクトの潜在的に複雑な構成により、プロセスのスクリプト化/自動化が困難になる可能性があります。バイナリアーティファクトをバージョン管理する必要があります
プロダクションボックスにアーティファクトを作成します
ここでは、開発者ボックスでローカルにビルドおよびデプロイするために日常的に使用されるのと同じプロセスが、本番環境にデプロイするために使用されます。
- 長所:維持する1つのプロセス。そしてそれは頻繁な使用によって徹底的にテスト/検証されています。事前に作成されたアーティファクトの後にカスタマイズするよりも、アーティファクトの作成時に構成をカスタマイズする方が簡単な場合があります。バイナリアーティファクトのバージョン管理は必要ありません。
- 短所:すべてのプロダクションボックスに必要な潜在的に複雑な開発ツール。展開スタッフはビルドプロセスを理解する必要があります。テストしたものをデプロイしていません
私は主に2番目のプロセスを使用しましたが、確かに必要があります(別の展開プロセスの時間/優先順位はありません)。個人的には、「本番ボックスですべてのコンパイラをクリーンアップする必要がある」などの議論は購入しませんが、(別のアーティファクトを作成するのではなく)テストしたものをデプロイする際のロジックを確認 できます。
ただし、Java Enterpriseアプリケーションは構成に非常に敏感であるため、アーティファクトを構成するための2つのプロセスで問題が発生するように感じます。
考え?
アップデート
具体的な例を次に示します。
OSCacheを使用し、ディスクキャッシュを有効にします。構成ファイルは.warファイル内にある必要があり、ファイルパスを参照します。このパスは、環境ごとに異なります。ビルドプロセスは、ユーザーの構成された場所を検出し、戦争に配置されたプロパティファイルがユーザーの環境に対して正しいことを確認します。
デプロイにビルドプロセスを使用する場合は、本番環境に適した構成を作成する必要があります(例production.build.properties
)。
「アセンブルされたアーティファクトを本番ボックスにデプロイする」に従う場合、(誤った)OSCacheプロパティを抽出し、本番環境に適したものに置き換えるための追加のプロセスが必要になります。
これにより、同じことを達成するための2つのプロセスが作成されます。
したがって、質問は次のとおりです。
- これは「本番環境でコンパイル」せずに回避できますか?
- そうでない場合、これは価値がありますか?「DonotRepeatYourself」よりも「本番環境でコンパイルしない」の価値は大きいのでしょうか?