Спорадические ошибки SVN 500 с CruiseControl.NET - PullRequest
7 голосов
/ 07 декабря 2010

Я управляю несколькими проектами в CruiseControl.NET. Многие из них не имеют ошибок сборки и имеют успешные сборки. Все они пытаются получить последний код до сборки.

Я заметил, что они часто терпят неудачу в строительстве; CruiseControl сообщает «Исключение». Исключением является ошибка SVN 500 (внутренняя ошибка сервера). Он срабатывает случайно, но постоянно (например, в одном проекте каждая чередующаяся сборка дает сбой).

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

В чем может быть проблема?

Для чего это стоит, вот верхняя строка примерного исключения (без URL-адреса проекта SVN или учетных данных):

ThoughtWorks.CruiseControl.Core.CruiseControlException: Source control operation failed: svn: Server sent unexpected return value (500 Internal Server Error) in response to OPTIONS request for 'https://some/url/trunk'
. Process command: C:\Program Files\CollabNet Subversion Client\svn.exe log https://some/url/trunk -r "{2010-12-04T09:09:19Z}:{2010-12-07T09:08:48Z}" --verbose --xml --username ******** --password ******** --non-interactive --no-auth-cache

Редактировать: Иногда это происходит из-за конфликта SVN в локальной папке. Но это не соответствует.


Щедрость : я добавил вознаграждение за общее решение этого вопроса: как можно настроить CC.NET для корректного управления ошибками SVN, т.е. не обрабатывать сбои SVN, вызванные периодической проверкой обновлений (в отличие от запланированных ежедневных сборок) в качестве сбоев сборки, но вместо этого корректно откатывается до тех пор, пока не будет исправлено или пока не восстановится соединение.

Мне не удалось понять это самому, хотя я не эксперт по CC.NET и давно не искал. Есть ли поддержка для этого или это нужно кодировать? Спасибо!

Чтобы уточнить,

  • У нас есть сервер CC.NET, который необходимо настроить для проверки новых коммитов и извлечения + сборки + тестирования всех изменений и сообщения о результате.
  • Однако, если сервер SVN выходит из строя или мы теряем соединение с ним, он обрабатывает это так, как если бы последний коммит прервал сборку: он устанавливает красный статус сборки и отправляет последнему коммитеру сообщение по электронной почте, как если бы это была его ошибка. .
  • Да, это будет проблемой для ежедневной сборки, но для непрерывной интеграции каждого коммита я не думаю, что это полезное поведение.

1 Ответ

1 голос
/ 14 декабря 2010

Одним из сложных способов решения этой проблемы является проверка изменений с помощью пакетного файла или пользовательской оболочки (вместо средства управления исходным кодом CruiseControl.NET), который вызывает клиент SVN и создает файл (или каким-либо другим способомсигнализации изменений), если требуется сборка.Пакет или оболочка могут обрабатывать исключения по мере необходимости.Конечно, это решение может потребовать изменения остальной части процесса сборки.

...