Резюме
У меня есть сборка в TeamCity, использующая Mercurial в качестве VCS, и она постоянно дает сбой по одной из следующих двух причин:
hg init
- хранилище уже существует, за исключением того, что я удалил весь каталог до этого, поэтому он определенно не существовал.
hg pull
- истекло время ожидания блокировки, но блокировка, которую он ожидает, кажется, является собственной блокировкой.
Я действительно надеюсь, что кто-то сталкивался с этим раньше, или, возможно, сможет дать мне несколько идей о том, как его устранить в любом случае.
Настройка
- Я использую TortoiseHg в качестве клиента Mercurial, и я обновил его
(и, следовательно, Mercurial) до версии 4.6.1 на сервере сборки и
агент.
Агент работает на виртуальной машине Windows 7.
У меня есть виртуальная машина Windows 10 с той же настройкой TeamCity / Mercurial, что
работает нормально.
Репо, с которого осуществляется извлечение, находится в общей сетевой папке.
- Папка, к которой выполняется выборка, находится на дополнительном диске виртуальной машины.
Я вижу две проблемы:
1. Ошибка Hg init
Шаги:
- Вручную удалите весь рабочий каталог из агента сборки, так что это папка .hg и ее родительская папка.
Рабочая папка сейчас даже не существует, поэтому TeamCity придется полностью воссоздать ее.
- Запустите сборку на TeamCity с чистыми выбранными файлами.
- Начнется сборка, создаст каталог и вызовет
hg init
.
- Сообщение об ошибке, что hg init не удалось, потому что «хранилище уже существует».
- Когда я смотрю на каталог, я вижу папку .hg и некоторые файлы внутри нее, включая файл wlock.
2. Ошибка тяги
Шаги:
- Оставьте рабочий каталог из задачи 1 на месте, включая каталог .hg.
- Убедитесь, что все файлы блокировки удалены и hg recovery было запущено на всякий случай.
- Запуск сборки на TeamCity без очистки каталога.
- Журналы показывают, что hg pull запускает и связывает файлы, но также говорит: «ожидание блокировки в рабочем каталоге E: \ blah, поддерживаемом процессом« 3408 »на хосте« BUILDAGENT »
3408, вот пример, число меняется каждый раз и соответствует процессу hg.exe, который, кажется, выполняет вытягивание.
- В конце концов, после множества сообщений о пакетах и файлах я получу сообщение о том, что время ожидания истекло до ожидания блокировки.
Но, конечно же, замок, который он ждет, кажется замком, который он держит сам!
- Если я удаляю файл wlock в течение этого времени, я буду видеть сообщения, говорящие «получил блокировку через X секунд» и сразу после него «ожидает блокировки в хранилище E: \ blah, удерживаемый процессом« 3408 »на хосте» BUILDAGENT '. Тогда в конце концов произойдет сбой с сообщением об отмененной транзакции.
У кого-нибудь есть идеи?