У нас есть скрипт NAnt для обновления наших «предварительно собранных» сборок в TFS как одного из наших проектов сборки TeamCity.Сборка запускается другими сборками.Он выполняет проверку TF, перемещает некоторые файлы, затем выполняет проверку TF.
Соответствующая цель (tf разрешает путь TF.exe):
<target name="checkin.assemblies">
<exec program="${tf}">
<arg value="checkin" />
<arg value="${dir.assemblies}" />
<arg value="/comment:${message}." />
<arg value="/noprompt" />
<arg value="/recursive" />
</exec>
</target>
Регулярно получаем:
Checking in edit: ...
The following changes were not checked in because the items were not modified.
Undoing edit: ...
There are no remaining changes to check in.
External Program Failed: E:\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe (return code was 1)
Process exited with code 1
BUILD FAILED - 0 non-fatal error(s), 1 warning(s)
Я думаю, что происходит то, что сборка запускается слишком много раз (есть несколько сборок, которые могут ее вызвать).Если файлы, которые мы хотим обновить, не изменились, TFS пропускает регистрацию и «услужливо» возвращает код ошибки.К сожалению, он также возвращает 1 для ошибок «заблокирован для извлечения», которые являются серьезными.
Для справки: Коды выхода из командной строки TF
Обходной путьпросто, но раздражает - запустите одну из сборок, которая увеличит номер версии сборки, а затем запустите эту сборку.
Как мы можем сделать эту работу надежной?
Обновление: В конечном итоге мы пересмотрели конфигурации запуска сборки для TeamCity, чтобы создать «цепочки» сборки, гарантируя, что регистрация запускается только один раз.