Сначала предыстория этого интригующего вызова.В сборке с непрерывной интеграцией часто возникают сбои при разработке и тестировании взаимоблокировок, циклов или других проблем, которые приводят к бесконечному тестированию.Таким образом, все механизмы уведомления о сбое сборки стали бесполезными.
Решение будет заключаться в том, чтобы иметь тайм-аут сценария сборки, если нулевой вывод в файл журнала сборки более 5 минут, так как сборка регулярно записываетимена юнит-тестов по мере прохождения.Так что это лучший способ определить, что он «заморожен».
Хорошо.Теперь самое мелкое ...
Сервер сборки использует Hudson для запуска простого сценария bash, который вызывает более сложный сценарий сборки на основе Nant и MSBuild (все в Windows).
Пока чтоВсе решения в сети включают тайм-аут на общее время выполнения команды.Но это решение в этом случае дает сбой, потому что тесты могут зависать или зависать в течение первых 5 минут.
То, о чем мы думали до сих пор:
Во-первых, вот команда высокого уровня:полный набор тестов в Hudson.
build.sh clean free test
Эта команда просто отправляет все журналы компоновки Nant и MSBuild на стандартный вывод.
Очевидно, что нам нужно передать этот вывод в файл:
build.sh clean free test 2>&1 | tee build.out
Затем параллельно команде нужно поспать, проверьте время изменения файла и, если более 5 минут, уничтожит основной процесс.kill -9
будет в порядке в этот момент - ничего изящного не понадобится, как только оно замерзнет.
Это часть, с которой вы можете помочь.
На самом деле, я сделал такой сценарий как этот15 лет назад, чтобы разорвать соединение с телефонной линией передачи данных в Японию после периодов бездействия, но не могу вспомнить, как я это сделал.
С уважением, Уэйн