私は、次の環境向けに、高速で反復可能で壊れないビルド プロセスをつなぎ合わせる最善の方法を見つけようとしています。私はそれを行う方法について計画を立てていますが、批評をいただければ幸いです。(サンプルコードもありがたいのですが、それについては後で詳しく説明します)
生態系 - 論理:
- Web サイト - asp.net MVC 2、.net 3.5、Visual Studio 2010。IIS 6、Facebook iframe アプリケーション アプリケーション。このウェブサイト/Facebook アプリは、いくつかのサービスを使用しています。内部検索 API、内部読み取り/書き込み API、Facebook、および IP ジオロケーション サービス。これらの詳細については、以下をご覧ください
- 内部検索 API - 古い学校の .ashx ハンドラーを使用して構築された、.net、安らかな。API は lucene を使用し、バックグラウンドで SQL サーバー データベースを使用します。私のプロジェクトは lucene コードには触れませんが、データベースと Web サービスに触れる可能性があります。
- 内部読み取り/書き込み API - Java、安静、Tomcat 上で実行
- Facebook Web サービス
- 内部の読み取り/書き込み API と facebook API の一部をエミュレートするモック サイト
- Hudson - チェックイン時に単体テストを実行し、一貫性のない動作をするインストーラーをいくつか作成します。
生態系 - 物理的:
ハドソンを除いて、これらのマシンはすべて互いに通信できます。Hudson はターゲット マシンを認識できません。したがって、コードはプッシュではなくプルする必要があります。(セキュリティの問題) 1. Web サーバー - Web サイトと読み取り/書き込み API を保持します。(API 自体は、レプリケートされた SQL サーバー環境に書き込みます)。
2. 検索サーバー - 検索 API を収容します。
3. Hudson サーバー - どの環境にもプッシュする権限がありません。彼らは引っ張らなければなりません。4. Lucene サーバー 5. データベースサーバー
問題
このサイトをストレス環境で実行するようにセットアップしようとしましたが、セットアップ手順の数、コンポーネントの更新にかかる時間、現在のインストーラーのブラックボックスの性質、およびかかる時間。テストシステムにデータを生成することは、私の生産性を完全に破壊しています。1 つの設定を微調整し、再デプロイし、特定の順序で再起動し、設定の一部をリセットし、テスト データを再構築する必要があります。エラーはヘッドスクラッチを引き起こし、基本的に最初からやり直します。ひどい。
この問題は、私のストレス テストによってさらに複雑になります。各部品のスケーラビリティを効果的に判断できるように、さまざまな外部コンポーネントのオンとオフを切り替える必要があります。依存関係ごとにそれを行う方法について戦略を立てていますが、各コンポーネントに 2 つのオプションがあるため、セットアップ戦略がさらに複雑になります。模擬バージョン、または実際のバージョン。それに応じて、あらゆる場所の構成を更新する必要があります。
目標
- 高速 - 順調に進んだ場合の 20 分間のエクササイズから、3 分間のエクササイズに短縮したいと考えています。
- ばかばかしい単純な - できるだけ少ないコマンドで何をすべきかを環境に伝えたいのですが、環境をつなぎ合わせる方法を覚える必要はありません。
- 反復可能 - スクリプトを冪等にしたい。Stupid Simple の結果のようなものです。
これまでの計画
これまでに私が思いついたものと、フィードバックを求めて来たものは次のとおりです。
- VisualStudio の新しい web.config 変換を使用して、環境に基づいて構成を簡単に変更できるようにします。ただし、このソリューションは実際には十分ではありません。サイトをローカルで実行できるように web.config を設定したままにしますが、他の場所に展開する場合、ストレス環境だけで 6 つの異なる出力が可能です (さまざまな依存関係のモックのため)。製品、QA、および開発。これらのそれぞれには、独自のセットアップ、または構成を後処理するセットアップが必要になります。したがって、私は現在、dev バージョンと、主要な構成値を Ruby 文字列補間構文に変換するバージョンを使用することに傾いています。({#VAR_NAME}のようなもの)
- サーバーごとに、基本的にブートストラップ スクリプトである ruby スクリプトを作成します。つまり、hudson/subversion から「実際の」作業を行う ruby コードをロードするだけで、スクリプトの機能がアプリケーションとともに進化し、いつでも簡単にサイトを構築できるようになります。適切なバージョンのスクリプトを参照してください。つまり、このスクリプトは別のスクリプトをロードして実行します。
- 「実際の」ruby スクリプトは、環境がどのように見えるべきかを記述するコマンドライン パラメータを受け入れます。そこから、1 つの構成ファイルを使用できます。Ruby は現在のインストーラーをダウンロードして実行し、構成を後処理し、IIS/Tomcat を再起動し、必要なデータ セットアップ コードを開始します。
それだけです。私は、このサイトのストレス テストをリアルタイムで実行する必要に迫られているので、これにかかる時間を短縮できると思われるフィードバックをいただければ幸いです。これには、サンプルの Ruby コードに対する恥知らずな要求が含まれます。「Hello World」よりも先に進んでいません。:-) ガイダンスだけでも役に立ちます。これはRakeが役立つものですか?この動物のテストを書くことをどのようにすすめますか? (インターフェイスと自動モック フレームワークを使用して、.net の http 要求などをモック化します。ダックタイピングを使用すると、これは簡単になるようですが、テストで偽のダックを使用するようにコードに指示する方法がわかりませんが、実際に実際のもの)
皆さんありがとう。このような長々とした、自由回答形式の質問で申し訳ありません。