Мы используем TeamCity с Subversion и MSBuild, и у нас есть проблема с непрерывной сборкой, которая запускается фиксацией Subversion.
Непрерывная сборка настроена для выполнения инкрементных сборок (ночная сборка полнаclean).
Проблема возникает, если разработчик изменяет и фиксирует файл во второй раз после начала сборки (инициированная фиксация), но до сборки объекта, использующего файл.Теперь объектный файл получает метку времени, которая идет после метки времени второй фиксации.Это приведет к тому, что все последующие инкрементные сборки будут пропускать изменения в файле.
Для большей ясности приведена временная шкала:
T1: разработчик фиксирует файл file.cpp (файл.cpp имеет время T1)
T2: первая инкрементная сборка запускается на сервере сборки
T3: сервер сборки получает файлы для последнего изменения (file.cpp в T1)
T4: разработчик фиксирует файл file.cpp во второй раз (file.cpp имеет T4)
T5: Buildserver компилирует file.cpp из T1 в file.obj (теперь file.obj имеет время T5)
T6: первая сборка завершается (результат хороший)
T7: втораяинкрементная сборка запускается на сервере сборки
T8: сервер сборки получает файлы для последнего изменения (file.cpp at T4)
А теперь проблема:
T9: Сервер сборки не компилирует file.cpp (из T4) в file.obj, потому что file.obj имеет T5, поэтому компилятор считает, что он новее исходного файла.
Проблема легко решаетсяс полной сборкой, но это займет много времени (30 минут безт тесты).
Возможно ли наращивание в сочетании с непрерывной интеграцией?
Редактировать: Эта проблема возникает только при использовании режима проверки на стороне сервера.В режиме проверки на стороне агента сборки измененные файлы получают временную метку времени получения, тогда как при проверке на стороне сервера они получают время фиксации в качестве временной метки.