Jenkins и Powershell: Start-Process с параметром "-Wait" - PullRequest
1 голос
/ 26 мая 2020

Как часть задания Jenkins в стиле фристайл (не конвейер со сценарием) я пытаюсь запустить шаг Powershell, который выполняет сценарий от имени другого пользователя. Я считаю, что шаг Powershell обеспечивается подключаемым модулем Jenkins Powershell.

Для этого я использую командлет Start-Process и указываю объект учетных данных в качестве параметра. Учетные данные извлекаются из хранилища учетных данных Jenkins.

Все работает нормально, кроме команды Start-Process, похоже, не соблюдается флаг "-Wait", который я предоставляю. Идея здесь в том, что сценарий, который я выполняю как другой пользователь, создает некоторые файлы на основе stdout / stderr, и мне нужно дождаться их создания, прежде чем я смогу продолжить работу.

Я делаю что-то вроде этого:

$runTestArgs = "-file $env:WORKSPACE\Scripts\runtest.ps1", `
"-Server", ` 
"-TestCategory $($env:TestCategory)"

Start-Process -FilePath powershell.exe -ArgumentList $runTestArgs -Credential $cred -RedirectStandardOutput "stdout.txt" -RedirectStandardError "stderr.txt" -Wait


Однако задание продолжает выполняться и не дожидается завершения порожденного процесса. Позже мне нужно взять stdout.txt и stderr.txt для разбора.

Я протестировал эти точные шаги на ведомом устройстве Jenkins, выполняя все от имени пользователя, под которым работает Jenkins, и, похоже, он работает отлично. Он ожидает завершения Start-Process, прежде чем продолжить и захватить содержимое этих файлов. Поведение не похоже на то же самое, когда я пробую его через настоящий веб-интерфейс Jenkins, выполнив «сборку» задания.

Я также пробовал нечто подобное, которое я нашел здесь, которое включает создание объекта из процесса, например:

$ps = Start-Process -FilePath powershell.exe -ArgumentList $runTestArgs -Credential $cred -RedirectStandardOutput "stdout.txt" -RedirectStandardError "stderr.txt" -Wait -PassThru

$ps.WaitForExit()

Что опять же, работает нормально на ведомом устройстве, когда я запускаю его как службу Jenkins user, но, похоже, не работает, когда я создаю настоящую работу.

Не был уверен, что это несоответствие между тем, что я запустил его от имени этого пользователя вручную, и выполняющим его Дженкинсом, было связано с тем, что он, кажется, обертывает шаги PowerShell, выполняясь следующим образом (фрагмент из консоли):

powershell.exe -NonInteractive -ExecutionPolicy Bypass -File C:\Users\JENKIN~1\AppData\Local\Temp\jenkins3475017597789662720.ps1

Есть идеи?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...