多くのNant/Msbuildファイルを書いて、管理しており、現在のプロジェクトではレーキが私の人生を楽にすると思われるいくつかの問題を抱えています。しかし、私は最初のハードルで少し困惑していますが、これはナントの目を通して問題を見ているからかもしれません。ここにいくつかのコンテキストを与えることレイクで環境に優しい建物へのアプローチは? (Msbuild/Nantから来て)
は、私は通常、私は(ちょうどそれの要素が何であるかを見て、実際の物理的な構造を忘れる)にレイアウトされるようにビルドを期待する方法である:
- Root
| - build-scripts
| - default.build
| - *.build
| - build-properties
| - dev.properties
| - live.properties
| - *.properties
| - tools
| - Nant
| - Nant.exe
| - *.*
| - Nunit
| - Nunit.exe
| - *.*
| - **/*.*
今、あなたが見ることができるようビルドの主なコンポーネントの上にはビルドスクリプトがあります。ビルドスクリプトには実際のビルド命令、ビルドプロパティーが含まれています。ビルドプロパティーは純粋に環境ごとのプロパティーを含むファイルです。すなわち
dev.propertiesがweb.service.url = "http://some.dev.address"
live.propertiesがweb.service.url = "http://some.live.address"
を含むことが含まれていてもよいするとなどナント、NUnitの、JsTestDriverとしてビルドスクリプトによって使用される外部実行可能なツールは、ある
今は私のdefault.buildファイルに焦点を当てて、これは使用されるディレクトリ(すなわちlibs、出力、パッケージ、プロジェクト、テスト)のような多くの初期プロパティを含む傾向があります。次に、他の* .buildファイルには、tests.buildがNunitを処理し、Unit/Integration/Acceptanceテストなどの関連するビルドスクリプトが含まれています。
ここでの主な問題は、コマンドラインから呼び出されたときにオーバーライドされる多数の事前定義されたプロパティー、つまりライブ環境用にビルドしていた場合はenvironment = liveを渡すか、空白のままにしておくとデフォルトになりますdev環境、CIサーバでは環境をCIに設定します。
私が見つけることができる例は、デフォルトのプロパティ/変数をRakeのコマンドラインでオーバーライドする方法を教えてくれないようですが、プロパティを設定してEnv []メカニズムを介して取得できることがわかりますこれを使用するには、通常のグローバル変数を設定し、渡されたenv変数をチェックし、それらのプロパティでグローバル変数を上書きするステップを持つ必要があります。グローバル変数を使用することもできますその中に私は気にしないが、私が学ぶことができるこの分野にいくつかのベストプラクティスがあることを期待していた。
私が考えていた最後のことは、渡される唯一の変数は環境(dev、ci、liveなど)なので、デフォルトのビルドタスクで引数を渡す必要があったからですこれはサポートされていますが、何も設定されていなければ "dev"として実行したいので、これが最善であるかどうかはわかりません。これは常に(ワールドの終わりではなく)1つを設定する必要があることを意味します。
この分野では、私の既存のアプローチを採用し、それをRakeと連携するように適応させようとしていることがわかります。どんなアドバイスや情報も素晴らしいでしょう!