Декларативный плагин Powershell от Jenkins не завершает процесс Powershell - PullRequest
0 голосов
/ 02 ноября 2018

Мы используем 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.

Заранее всем спасибо:)

...