Возможно ли наращивание в сочетании с непрерывной интеграцией? - PullRequest
4 голосов
/ 18 ноября 2010

Мы используем 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 минут безт тесты).

Возможно ли наращивание в сочетании с непрерывной интеграцией?

Редактировать: Эта проблема возникает только при использовании режима проверки на стороне сервера.В режиме проверки на стороне агента сборки измененные файлы получают временную метку времени получения, тогда как при проверке на стороне сервера они получают время фиксации в качестве временной метки.

1 Ответ

2 голосов
/ 19 ноября 2010

Да, у вас определенно есть состояние гонки. Я полагаю, что вы могли бы попытаться стать умнее, опросив журнал изменений и коснувшись любых файлов, перечисленных там - или еще лучше, если он поддерживается, если Subversion не сохраняет время изменения файла, скорее, отметка даты файлов будет датой, когда они были обновлен расположен.

Один из тех клуджей, которые я видел вокруг, заключается в том, что большую часть времени можно запускать только инкрементные сборки, но при этом некоторая часть сборок должна выполняться без ошибок (возможно, по ночам). Вы можете периодически попадать в это состояние гонки, но вы будете регулярно выходить из него. В зависимости от того, как часто это происходит, этот клад может быть достаточно хорошим.

...