現在、4 人の開発者が Visual Studio 2012 で作業しており、ソース管理には TFS 2012 を使用しています。私たちが取り組んでいるプロジェクトは、レガシー、asp、vb6 com コンポーネントと新しい C# コードを組み合わせたマルチテナント Web アプリケーション (複数のデータベースを持つ単一ソース ディレクトリ) です。ソース管理とユーザー ストーリーとバグの管理に TFS を使用しています。私たちのサイトの仕組みにより、サーバー上でのみローカルで実行またはデバッグすることはできません。ソース管理は現在、開発者ごとに個別のブランチでセットアップされており、作業ディレクトリは、IIS で Web サイトがポイントされている開発サーバー上の共有ネットワーク パスにマップされています。Dev01-Dev05 など。開発者は、ブランチでプロジェクトに取り組み、開発 Web サイトを使用してテストし、変更を自分のブランチにチェックインして、トランクにマージします。
非常に長い説明ですが、基本的に各開発者にはブランチとサイトがあり、それらは独自のサイトを持つトランクにマージされます。
ステージング サーバーをデプロイするには:
- サーバー上のbatファイルを介してトランクのWebサイトをコンパイルします
- 特定のステータスの特定の WorkItem に関連付けられた変更セットについて TFS にクエリを実行するために作成した Windows アプリを実行し、それらの変更セットのすべてのファイルを公開フォルダーから展開フォルダーにコピーします。
- サーバー上で別のバッチ ファイルを実行し、RedGate の Deployment Manager を使用してそれらの新しいファイルからパッケージを作成します。
- 私たちのネットワークの DM サイトにアクセスして、そのリリースを作成してデプロイします (コマンド ライン ツールをこのために機能させることができなかったので、手動で行う必要があります)。
- リリースをサポートするために、各データベース (10 程度の顧客データベース) のチケット番号と一致するフォルダに保存されている SQL スクリプトを実行します。
TFS の自動ビルド機能を使用してみましたが、Web サイトを正しくビルドすることはできませんでした。クルーズコントロールをいじってみましたが、ほとんど成功しませんでした。これを行うためにスカンク作品の寄せ集めのプロジェクトを使用すると、非常に時間がかかり、せいぜい信頼性が低くなります。
私の完璧なシナリオは次のとおりです。
- ゲート付きチェックイン、開発者がトランクにマージするたびにビルド/公開を試み、ビルドが失敗した場合は拒否して開発者に通知します。
- 一日の終わりに、特定のステータスの TFS アイテムを収集し、それらに関連付けられたファイルをステージング サイトに展開します
- これらの TFS アイテムの SQL スクリプトを、ステージング内のすべての顧客データベースにデプロイします
- 最終的に* 自動回帰 UI テストを実行し、新しい WorkItem を作成するか、失敗した場合は開発者に電子メールを送信します
- TFS ワークアイテムを新しい状態に更新して、QA/顧客がアイテムをステージング環境でテストする準備ができていることを認識できるようにします
- 正常に展開されたアイテムのレポートを送信する
ステージング、そして最終的には本番環境へのリリースの準備と展開に何時間も費やさないようにするには、どうすればここにたどり着くことができるでしょうか? 潜在的な解決策に対してかなりオープンです。変更するのが難しいものは、使用しているソース管理であり、実際にはサブバージョンなどに切り替えることができないため、TFS にかなりこだわっています。
ありがとう