我們在Subversion和MSBuild中使用TeamCity,並且我們遇到了由Subversion提交觸發的連續構建的問題。漸進式建築可與持續集成結合使用嗎?
連續構建設置爲增量構建(每晚構建完整且乾淨)。
如果開發人員在構建開始(提交觸發)後但在構建使用該文件的對象之前第二次更改並提交文件,則會出現此問題。現在,目標文件獲得第二次提交時間戳之後的時間戳。這會導致所有後來的增量構建跳過對文件的更改。
對於此額外的清晰度是時間線:
T1:開發商承諾file.cpp(file.cpp有時間T1)
T2:一是增量編譯生成服務器上啓動
T3:構建服務器獲取最新變化的文件(file.cpp在T1)
T4:開發人員第二次提交file.cpp(file.cpp有T4)
T5:Buildserver將T1的file.cpp編譯成file.obj(現在file.obj有時間T5)
T6:第一次建造完成(效果很好)
T7:第二增量編譯生成服務器上啓動
T8:建立服務器獲取最新變化中的文件(在T4 file.cpp)
而現在的問題:
T9:構建服務器不會將file.cpp(T4)編譯到file.obj中,因爲file.obj是T5,因此編譯器認爲它比源文件更新。
這個問題很容易修復,但需要很長時間(30分鐘沒有單元測試)。
漸進式建築是否可以與持續集成相結合?
編輯:此問題似乎只在使用服務器端結帳模式時發生。使用構建代理端檢出模式更改的文件獲取檢索時間的時間戳,而在服務器端檢出時,它們將提交時間作爲時間戳。
您的CI服務器可以詢問您的VCS有關代碼更改的信息。 – jfs 2010-11-18 19:37:59
它的確如此。問題在於時機。如果在CI服務器獲得prev後更改文件。版本,但在構建中實際使用它之前,似乎存在問題。 – Halt 2010-11-19 09:55:46
@Halt:我的意思是你的VCS可以知道哪些文件真的發生了變化,所以你可以觸摸它們以使你的構建系統正常工作。類似'svn diff -r PREV:HEAD --summarize | awk'{print $ 2}'| xargs touch' – jfs 2010-11-20 09:29:01