Мы используем Jenkins для сборки наших проектов, но иногда работа зависает (ровно на 3 часа) после запуска сценария сборки.
Мы используем декларативный конвейер, и скрипт jenkins выглядит так:
steps {
powershell """
"cd '${WORKSPACE}'"
& ./build.ps1
write-host after script
Start-Sleep -s 5
write-host after sleep
exit \$LastExitCode
"""
echo "after build"
powershell """
write-host second powershell
"""
}
Сценарий сборки PowerShell использует MSBuild и Gradle для построения проектов, а затем добавляет результат в ZIP-файл.
Когда работа зависает, я вижу вывод 'after sleep' в консольном выводе работы, затем ничего не выводится в течение 3 часов. В течение всего 3 часов я вижу, как вращается знак «в процессе», что означает, что работа Дженкинса продолжается. Через 3 часа выводится строка «после сборки».
Когда работа зависает, я все еще могу видеть на сервере Jenkin процесс powershell (фактически, я вижу 2 процесса powershell, не знаю, нормально ли это). Это означает, что команда exit \ $ LastExitCode не завершила процесс powershell. Я попытался поместить строки после вызова сценария сборки в блок try-catch, но исключение не обнаружено, и «после сна» выводится только один раз, поэтому задание застревает при вызове exit.
Я не знаю, связано ли это с https://issues.jenkins -ci.org / browse / JENKINS-48175 , поскольку мой скрипт работает нормально. Последняя строка моего сценария - успешная сборка на хосте записи, и я вижу сообщение.
Если работа зависает и я пытаюсь ее отменить, я вижу сообщение Sending interrupt signal to process After 10s process did not stop
в выводе консоли.
Я также попытался понизить плагин Durable Tasks до 1.15, но поскольку я использую другой плагин, который зависит от более поздней версии, сборка завершается неудачей.
В целом, я думаю, что проблема в том, что задание Дженкинса не может завершить процесс powershell. Сервер Jenkins - это Windows Server 2012 R2, а версия Jenkins - 2.147.
Заранее всем спасибо:)