我们在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