いくつかの独立したアプリケーションを使用して、かなり複雑なプロジェクトを実行しています。ただし、これらはいくつかの共有コンポーネントを使用します。だから私は以下のようなソースツリーを持っています。
- 私のプロジェクト
- アプリケーションA
- 共有1
- 共有2
- アプリケーションB
- アプリケーション C
すべてのアプリケーションには、プロジェクトと必要なすべての共有リソースをビルドする独自の MSBuild スクリプトがあります。これらのビルドは、CruiseControl 制御の継続的インテグレーション ビルド サーバーでも実行します。
アプリケーションがデプロイされると、複数のサーバーにデプロイされて負荷が分散されます。これは、異なるサーバーのそれぞれにどのビルド/リビジョンが展開されているかを追跡することが非常に重要であることを意味します (「1.0.0.68」など、DLL バージョンに現在のバージョンが必要です)。
何かが意図したとおりに機能しなかった場合にロールバックできるようにビルドされたリビジョン/ビルドを再作成できることも同様に重要です (そうです、それは起こります...)。現在、ソース管理に SourceSafe を使用していますが、その正当な理由を示すことができれば、変更することも可能です (SS 現在のところ、実際には問題なく動作しています)。
私たちが従おうとしているもう 1 つの原則は、さらに展開する統合サーバーによってビルドおよびテストされたコードのみであるということです。
「CrusieControl ビルド ラベル」ソリューション
上記を解決するためにいくつかのアイデアがありました。1 つ目は、継続的インテグレーション サーバーでプロジェクトをビルドし、ローカルにデプロイしてテストすることでした (現在はそれを実行しています)。おそらく知っているように、CruiseControl でビルドが成功するとビルド ラベルが生成されます。これを使用して、実行可能ファイルの DLL バージョンを設定できると思います (つまり、ビルド ラベル 35 は「1.0.0.35」のような DLL を作成します)。このビルド ラベルを使用して、完全なソース ツリーにラベルを付けるというアイデアもありました。その後、おそらくそのラベルでチェックアウトし、後でビルドを再作成できます。
完全なツリーにラベルを付ける理由は、実際のアプリケーション コード (ソース ツリーの 1 か所にある) だけでなく、すべての共有アイテム (ツリーの別の場所にある) も含めるためです。したがって、「アプリケーション A」のビルドが成功すると、ツリー全体にラベル「ApplicationA35」などのラベルが付けられます。
ただし、CruiseControl で生成されたビルド ラベルにアクセスできなくなるため、デプロイ前にこのビルドを再作成して DLL バージョンを設定すると、問題が発生する可能性があります。すべての CrusieControl ビルド ラベルがすべてのプロジェクトで一意である場合、ラベル付けに番号のみを使用できますが、そうではありません (アプリケーション A と B の両方が同時にビルド 35 である可能性があります)。ラベル。したがって、SourceSafe ラベルは「Application35」です。ビルド 35 をビルドしたら、ビルド 34 を再作成し、1.0.0.34 を DLL バージョン番号に設定するにはどうすればよいですか?
「改訂番号」ソリューション
たとえば、Subversion はチェックインのたびにソース ツリー全体のリビジョン番号を作成すると誰かが私に言いましたが、これは本当ですか? SourceSafe に似たようなものはありますか? これが正しければ、最新版を取得して CruiseControl サーバー上でビルドするときにそのリビジョン番号を取得するという考え方です。リビジョン番号は、DLL のバージョン番号 (たとえば、「1.0.0.5678」) を設定するために使用できます。その後、必要に応じて Subversion のこの特定のリビジョンを取得し、そのアプリケーションとすべての共有アイテムを含めて、過去の特定のバージョンを再作成できると思います。それは機能し、これも SourceSafe を使用して実現できますか?
要約する
したがって、主な要件は次の 2 つです。
- ビルドおよび展開された DLL のビルド/リビジョン番号を追跡できます。
- 過去のリビジョン/ビルドを再構築し、そのビルドの実行可能ファイルに古いビルド/リビジョン番号を設定できるようにします (要件 1 に準拠するため)。
では、これをどのように解決しますか?あなたの好みのアプローチは何ですか? また、それをどのように解決しますか? (または、まったく異なるアイデアをお持ちですか?) **詳細な回答をお願いします。**
おまけの質問リビジョン番号とビルド番号の違いは何ですか? また、両方が本当に必要になるのはいつですか?