Ответ 1
Чтобы вызвать скрипт PowerShell из Groovy-Script:
- Вы должны использовать команду
bat
. - После этого вы должны быть уверены, что переменная Error Code (
errorlevel
) будет возвращена правильно (EXIT 1
должен привести к ошибкеFAILED
). - Наконец, чтобы быть совместимым с PowerShell-Plugin, вы должны быть уверены, что
$LastExitCode
будет учитываться. - Я заметил, что "powershell" теперь доступен в конвейере, но, поскольку у него есть несколько проблем, я предпочитаю этот вариант. Все еще жду, работает стабильно. У меня действительно есть проблема с поведением dontKillMe.
Для этой части я написал небольшой метод, который можно интегрировать в любой конвейер-скрипт:
def PowerShell(psCmd) {
psCmd=psCmd.replaceAll("%", "%%")
bat "powershell.exe -NonInteractive -ExecutionPolicy Bypass -Command \"\$ErrorActionPreference='Stop';[Console]::OutputEncoding=[System.Text.Encoding]::UTF8;$psCmd;EXIT \$global:LastExitCode\""
}
[EDIT] Я добавил UTF8 OutputEncoding: прекрасно работает с Server 2016 и Win10. [/EDIT] [EDIT] Я добавил маску '%' [/EDIT]
Затем в своем конвейерном скрипте вы можете вызвать свой скрипт так:
stage ('Call Powershell Script')
{
node ('MyWindowsSlave') {
PowerShell(". '.\\disk-usage.ps1'")
}
}
Лучшее, что есть в этом методе, это то, что вы можете вызывать CmdLet
без необходимости делать это в CmdLet
, что является наилучшей практикой.
Вызовите ps1 для определения CmdLet
, а затем вызовите CmdLet
PowerShell(". '.\\disk-usage.ps1'; du -Verbose")
- Не забудьте использовать withEnv() и тогда вы лучше, чем полностью совместимы с плагином Powershell.
- отложить ваш сценарий с
.
чтобы убедиться, что ваш шаг не удался, когда скрипт возвращает код ошибки (должен быть предпочтительным), используйте&
если вам это не важно.