Как часть задания 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
Есть идеи?
Спасибо