2010-11-18 6 views
4

TeamCityをSubversionとMSBuildで使用しており、Subversionコミットによってトリガーされる連続ビルドに問題があります。継続的インテグレーションと組み合わせてインクリメンタルビルディングが可能ですか?

連続ビルドがセットアップされるインクリメンタルビルドを行うに(ナイトリービルドは、完全かつクリーンです)。

問題があれば、開発者の変更を発生し、ビルドが開始された後に(トリガーされたコミット)が、ファイルを使用するオブジェクトが構築される前に、二度目のファイルをコミットします。オブジェクトファイルは、2回目のコミットのタイムスタンプの後にあるタイムスタンプを取得します。これにより、それ以降のすべてのインクリメンタルビルドがファイルの変更をスキップします。

T1:ここに余分明確にするために

は、タイムラインで開発者がコミットfile.cpp(file.cppは、時間T1を持っている)
T2:まず、インクリメンタルビルドがビルドサーバー上
T3を開始します。サーバーを構築します(file.cppにはT4)
T4:開発者がfile.cppを2回目にコミットします。
T5:BuildserverがT1のfile.cppをfile.objにコンパイルします(今すぐfile.objに時間T5がある)
T6:最初のビルドが終了しました(結果は良好です)
T7:第二インクリメンタルビルドがビルドサーバー上
T8を開始:

T9:サーバーを構築する構築し、サーバには、最新の変更(T4でfile.cpp)

そして今、問題のファイルを取得しますfile.objがT5であるためコンパイラはそれがソースファイルより新しいと考えているので、file.cpp(T4の)をfile.objにコンパイルしません。

問題

は簡単に完全なビルドで固定されているが、これらは、長い時間(ユニットテストなしで30分)を取ります。

は、継続的インテグレーションとの組み合わせで、増分建物は可能ですか?

編集:この問題は、サーバー側のチェックアウトモードを使用する場合に起こるようです。ビルドエージェントのサイドチェックアウトモードでは、変更されたファイルは取得時間のタイムスタンプを取得し、サーバサイドのチェックアウトではタイムスタンプとしてコミット時間を取得します。

+0

CIサーバーはコード変更についてVCSに問い合わせることができます。 – jfs

+0

です。問題はタイミングです。 CIサーバーがprevを取得した後にファイルが変更された場合。ビルドで実際に使用される前に問題があるようです。 – Halt

+0

@Halt:あなたのVCSが実際に変更されたファイルを知ることができるので、ビルドシステムを正しく動作させるためにそれらのファイルに触れることができます。 'svn diff -r PREVのようなもの:HEAD --summarize | awk '{print $ 2}' | xargs touch ' – jfs

答えて

2

はい、あなたは間違いなく競合状態を持っています。私はあなたが変更ログを調べてそこに記載されているファイルに触れることで賢明になると思うかもしれません - もしサポートされていれば、Subversionはファイルの修正時間を保存せず、更新された位置。

私はこれを見てきたkludgesの1つは、ほとんどの場合インクリメンタルビルドを実行することですが、クリーン(おそらく夜間)を実行するビルドのいくつかの部分を持っています。あなたは定期的にこの競合状態に巻き込まれるかもしれませんが、定期的にそれを打ち破ります。これが起こる頻度に応じて、このkludgeは十分に良いかもしれません。

+0

私は定期的にクリーニングすることを考えましたが、問題が発生した後、ビルドを壊すと(それがわかったのですが)、それ以降はすべてのビルドが中断されるため、それに対して決定しました。それがビルドを壊していない場合は、それがあなたの変更を含むことを信頼することはできませんので、次のクリーンアップまで多くのテストを意味することはありません。 – Halt

+1

"サポートされている場合、Subversionはファイルの変更時刻を保持しないで、ファイルの日付スタンプを更新日にする必要があります。「use-commit-times」オプションを明示的に設定しない限り、これはSubversionのデフォルトの動作です。 configファイル(http://svnbook.red-bean.com/nightly/en/svn.advanced.confarea.html#svn.advanced.confarea.opts.config) – slowdog

関連する問題