2011-01-27 10 views
1

私はNAntを使ってASP.NET MVCプロジェクトを構築しています。NAntでパッケージ化、異なる環境を扱う方法

NAntスクリプトは、配布スクリプトと必要なすべてのファイルを含むzipパッケージを作成します。

deployスクリプトは、現在実行中のWebサイトをバックアップし、新しいバージョンのWebサイトを設定してDBを更新します。

これは単一の環境でうまく動作します。

しかし、生産の横にステージング/受け入れ環境を設定するようになってきています。もちろん、これらの環境はファイル構造、DBサーバー、設定の設定などが異なります。

デプロイメントスクリプトでこれをどうやって処理するのがいいですか?私は、環境ごとに個別の変数を作成したくない。名前だけで区別できる。

デフォルトを提供し、別々のファイルに変数を提供する方がより論理的です。

誰もがこれに関する実践経験がありますか?

答えて

1

環境間で変更される可能性のあるものを設定ファイルに保存します。

Visual Studioでは、必要に応じてここで重い作業を行うことができます。 Visual Studioプロジェクトのプロパティの[設定]タブから設定を作成し、デフォルト値を指定することができます。

これは、あなたのための設定ファイルを作成し、Properties.Settings.Defaultを通して強く型付けされたアクセスを提供します。

ビルドを通じて複数の環境を処理する場合、私はいくつかの設定ファイル(複数の環境ごとに1つずつ)を管理することを勧めている人もいますが、ビルドやデプロイメント中に設定ファイルを変更するためにnant段階。コマンドラインで(たとえば)nantに渡されたプロパティを使用して、ビルドしている環境を選択したり、実行している方法に応じて配置することができます。

ので、私はこれらのアプローチのいずれかをお勧めしません:彼らの両方が、新しい環境をサポートするようにビルドへの変更を必要と

  1. デプロイされた環境で設定を変更してビルドを更新するのを忘れた場合、次のデプロイメントで変更がリセットされます(設定のポイントをいくらか打ち負かす)。
  2. 新しい環境を作成した場合(たとえば、新しいバージョンのSQL Serverにアップグレードする際に発生する問題を調べたい場合など)、ビルドシステム内の新しい設定ファイルをすべて作成したくない場合、既存の環境の設定を使用します。ライブ設定を使用して展開し、後で何かを変更することを忘れてしまったとしましょう。あなたの新しい「テスト」環境は、現在、ライブキットを指している可能性があります。

私は各設定ファイル(例えばweb.config.exampleと呼ばれる)のコピーを作成し、それらの設定をコメントアウトします(意味のあるデフォルト値がない限り)。私はこれらをチェックして、の代わりにを実際のweb.config(つまり、web.configが自動的にデプロイされないweb.config.exampleとしてデプロイされています。

新しい環境の管理者は、ファイルをweb.configにコピーして名前を変更し、意味のある値を提供する必要があります。私は自分のラッパークラスの背後にあるすべての設定を呼び出します。必須の設定がない場合は例外がスローされます。

ビルド環境と私の環境は、もはやお互いに依存しません.1つのビルドはどの環境にも展開できます。

設定が欠落している(新しい環境または既存の環境での新しい設定)場合、管理者に何をすべきかを伝えるために明確な例外が生成されます。

.exampleファイルのみが更新されているため、アップグレード後も既存の設定は変更されません。現在の設定と最新の例を比較し、必要に応じて修正するのは管理タスクです。

デプロイメントを設定するには、すべての環境設定(インストールパスなど)をnantプロパティに入れて別のファイル(settings.buildなど)に移動してから、nantインクルードタスクを使用してそのファイルをデプロイメントファイルの先頭(たとえばdeploy.build)。設定の変更をsettings.buildに上書きしなくても、新しいバージョンのdeploy.buildをデプロイできます。新しいプロパティがdeploy.buildに導入された場合、ナントはそのプロパティを設定していないことを伝える良いメッセージで失敗します。

+0

こんにちは、お返事ありがとうございます。それはすでに私たちがやっていることのかなりの部分です。かなり似ています。しかし、私が本当に知りたいのは、環境配備の違いをどう対処するかです。たとえば、新しいバージョンのWebアプリケーションをインストールする前に、古いアプリのバックアップディレクトリを指定します。 – Bertvan

+0

私は答えを少し追加しましたが、あなたの質問に別々のファイルを使用していることをすでに言及していますので、あなた自身が既にそこにいたと思います。 – robaker