Сбой сборки из-за сбоя извлечения репозитория из-за наличия хранилища или ожидания блокировки - PullRequest
0 голосов
/ 03 сентября 2018

Резюме

У меня есть сборка в TeamCity, использующая Mercurial в качестве VCS, и она постоянно дает сбой по одной из следующих двух причин:

  1. hg init - хранилище уже существует, за исключением того, что я удалил весь каталог до этого, поэтому он определенно не существовал.
  2. hg pull - истекло время ожидания блокировки, но блокировка, которую он ожидает, кажется, является собственной блокировкой.

Я действительно надеюсь, что кто-то сталкивался с этим раньше, или, возможно, сможет дать мне несколько идей о том, как его устранить в любом случае.

Настройка

  • Я использую TortoiseHg в качестве клиента Mercurial, и я обновил его (и, следовательно, Mercurial) до версии 4.6.1 на сервере сборки и агент.
  • Агент работает на виртуальной машине Windows 7.
    У меня есть виртуальная машина Windows 10 с той же настройкой TeamCity / Mercurial, что работает нормально.

  • Репо, с которого осуществляется извлечение, находится в общей сетевой папке.

  • Папка, к которой выполняется выборка, находится на дополнительном диске виртуальной машины.

Я вижу две проблемы:

1. Ошибка Hg init

Шаги:

  1. Вручную удалите весь рабочий каталог из агента сборки, так что это папка .hg и ее родительская папка.
    Рабочая папка сейчас даже не существует, поэтому TeamCity придется полностью воссоздать ее.
  2. Запустите сборку на TeamCity с чистыми выбранными файлами.
  3. Начнется сборка, создаст каталог и вызовет hg init.
  4. Сообщение об ошибке, что hg init не удалось, потому что «хранилище уже существует».
  5. Когда я смотрю на каталог, я вижу папку .hg и некоторые файлы внутри нее, включая файл wlock.

2. Ошибка тяги

Шаги:

  1. Оставьте рабочий каталог из задачи 1 на месте, включая каталог .hg.
  2. Убедитесь, что все файлы блокировки удалены и hg recovery было запущено на всякий случай.
  3. Запуск сборки на TeamCity без очистки каталога.
  4. Журналы показывают, что hg pull запускает и связывает файлы, но также говорит: «ожидание блокировки в рабочем каталоге E: \ blah, поддерживаемом процессом« 3408 »на хосте« BUILDAGENT »
    3408, вот пример, число меняется каждый раз и соответствует процессу hg.exe, который, кажется, выполняет вытягивание.
  5. В конце концов, после множества сообщений о пакетах и ​​файлах я получу сообщение о том, что время ожидания истекло до ожидания блокировки.
    Но, конечно же, замок, который он ждет, кажется замком, который он держит сам!
  6. Если я удаляю файл wlock в течение этого времени, я буду видеть сообщения, говорящие «получил блокировку через X секунд» и сразу после него «ожидает блокировки в хранилище E: \ blah, удерживаемый процессом« 3408 »на хосте» BUILDAGENT '. Тогда в конце концов произойдет сбой с сообщением об отмененной транзакции.

У кого-нибудь есть идеи?

...