2011-12-19 10 views
2

2つのプロジェクトがあり、それぞれに依存関係があります。たとえば、プロジェクトfooに依存するプロジェクトバーがあります。 fooプロジェクトは、同じ種類の問題を何度も何度も解決していることが分かっているため、他のすべてのプロジェクトに含めるSDK(ベースライブラリ)です。TeamCityを使用して別のプロジェクトのDLLを別のプロジェクトに含めるにはどうすればいいですか

現在、プロジェクトfooとbarは独立してビルドされており、barプロジェクトはfoo.dllへの参照を持ち、SVNのbar \ libフォルダに格納されています。したがって、fooプロジェクトを変更した場合は、最新のビルドを実行して、バープロジェクトをチェックアウトし、新しいDLLをコピーして再度コミットする必要があります。これは少し手作業で迷惑です。特にfooライブラリに依存しているプロジェクトが3〜4件ほどあるためです。

これは少しばかげているので、私は1つの解決策にすべてのことを固執したくありません。 fooプロジェクトはそれを頻繁に変更すべきではなく、SDKを提供します。彼らはお互いに関連していません。私たちはすでに、関連プロジェクトをソリューションにまとめています。私たちはすでにテストプロジェクトを行っている4-5プロジェクトのソリューションをいくつか持っています。すべてを固執すれば、40〜50のプロジェクトで解決策が生まれ、それは悪夢のようだ。

私がTeamCityで達成したいのは、Fooに変更が加えられた場合、Fooの更新されたDLLを使用して新しいビルドのビルドを自動的にトリガーするということです。そうすれば、誰かが急激な変化を起こすとすぐに見つけることができます。そして、犯人は、バギーコミットを修正するか、すべての依存プロジェクトに必要な変更を加えなければなりません。

TeamCityで構築したソリューションのほとんどは、ユニットテストを実行し、成果物を作成しています。私はfooビルドのbarビルド設定でアーティファクト依存関係をセットアップしようとしました。これにより、foo \ build \ release \ foo.dllがbar \ lib \ foo.dllにコピーされます。現時点でエラーが発生する

Failed to resolve artifact dependency xxx ... java.io.FileNotFoundException ... Access Denied 

私たちが試みていることを実行するベストプラクティスは何ですか?私たちは正しい方法をとっていますか?私たちが正しい方法でこれをやっているなら、このエラーをどうやって解決するのでしょうか?

答えて

3

SVN外観を使用して、プロジェクト間でアセンブリを共有することができます。

ビルドの最後には、常にSVNの出力にタグを付けるとともに、最新のフォルダの内容を最新のビルド出力に置き換えます。

_output\v1.2.3\ 

_output\v1.2.4\ 

_output\latest\ 

のでlatestv1.2.4フォルダと同じが含まれています。開発中には常にプロジェクトの依存関係が最新のフォルダを対象とするため、プロジェクトがチェックアウトされるたびに最新の正常なビルドアセンブリがロードされます。

このようにしてTeamCityのビルド構成を連鎖させることができます。そのため、FOOが正常にビルドされたときに、例を使用してBARが直後にビルドされます。最新のフォルダーからFOOアセンブリーをチェックアウトするので、BARプロジェクトは最新の変更でビルドされます。

これは、ビルドプロセスだけでなく、それを継続的インテグレーションにする理由です。

すべてのタイプミスを謝罪します。私はネットブックの小さなカムパーにいる。キーは小さく、肘の部屋はあまりありません!

+0

+1努力のため。ありがとう – uriDium